首页 > 解决方案 > 更改某些列的默认权限

问题描述

我希望 RoleGroup 对表中的特定列具有某些特权……。roleGroup 不是 DB 所有者:

 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 ;

那么第一笔赠款有什么意义呢?!!还是我犯了一些错误?

标签: sqlpostgresql

解决方案


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

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来授予列的权限。

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

或者,您可能希望将来添加到现有表的列应该自动获得特权,但我也不认为这样的功能非常有用。


推荐阅读