更改某些列的默认权限

时间:2018-07-18 05:08:58

标签: sql postgresql

我希望RoleGroup在表中的特定列上具有某些特权.... roleGroup不是数据库所有者:

 grant  SELECT, INSERT ,UPDATE  (colOne) on table schemaOne.tableOne 
 to roleGroup;

当我想更改此列的默认权限(以包括将来的用户)时,我收到错误消息,说只能仅更改一个列的默认权限:

alter default privileges for role DB_OWNER in schema schemaOne grant 
select,insert,update(colOne) on table schemaOne.tableOne to 
roleGroup;

这迫使我这样做:

Alter Default priviliges for role DB_OWNER in schema schemOne grant 
select,insert,update to roleGroup ;

那么第一次拨款的意义何在?!还是我犯了一些错误?

1 个答案:

答案 0 :(得分:1)

整个问题有点不清楚,因为您的两个陈述在语法上都是错误的。

GRANT授予现有对象的特权,而ALTER DEFAULT PRIVILEGES定义将哪些特权自动授予将来在创建的对象。因此,这些语句的范围并不重叠,而是相互补充的。

我想您会误解了这一点,否则您将不会尝试在现有表上ALTER DEFAULT PRIVILEGES

有效表格为:

ALTER DEFAULT PRIVILEGES FOR ROLE db_owner IN SCHEMA schemaone
   GRANT INSERT, SELECT, UPDATE ON TABLES TO rolegroup;

这将授予db_owner 将来在该架构中创建的所有表的特权。

问题的标题表明您想知道为什么不能使用ALTER DEFAULT PRIVILEGES授予列特权。

可能的答案是,并非所有将来的表都需要具有列colone,而没有该名称的列的表应该怎么办。您可能会争辩说在那种情况下不应授予任何特权,我想这是一个有效的选择。但是似乎很难为此提供一个用例,这可以解释为什么到目前为止没有人考虑实现这种功能。

或者,您希望将来会添加到现有表中的列应自动获得特权,但是我仍然认为这种功能不是很有用。