【问题标题】:alter default privileges of certain column更改某些列的默认权限
【发布时间】:2018-07-18 05:08:58
【问题描述】:

我希望 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 ;

那么第一次资助有什么意义呢?!!还是我犯了一些错误?

【问题讨论】:

    标签: sql postgresql


    【解决方案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,而没有该名称列的表会发生什么情况。您可能会争辩说,在这种情况下不应授予任何特权,我想这是一个有效的选择。但似乎很难为此想出一个用例,这可以解释为什么到目前为止还没有人考虑实现这样的功能。

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

    【讨论】:

    • @Laurenze Albe ; 1-您对不正确的语法是正确的,2-您提请我注意一些优点..谢谢。
    猜你喜欢
    • 2014-10-05
    • 2012-09-10
    • 2013-01-07
    • 1970-01-01
    • 2021-09-18
    • 2014-02-26
    • 2012-11-02
    • 2012-01-22
    • 2013-06-05
    相关资源
    最近更新 更多