sql - 更改某些列的默认权限
问题描述
我希望 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 ;
那么第一笔赠款有什么意义呢?!!还是我犯了一些错误?
解决方案
整个问题有点不清楚,因为您的两个陈述在语法上都不正确。
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
,并且没有该名称的列的表应该发生什么。您可能会争辩说,在这种情况下不应授予任何特权,我想这是一个有效的选择。但似乎很难为此提出一个用例,这可以解释为什么到目前为止还没有人考虑实现这样的功能。
或者,您可能希望将来添加到现有表的列应该自动获得特权,但我也不认为这样的功能非常有用。
推荐阅读
- python - 如何处理 Cv2/.dylibs/QTGui 和 LibQcocoa/LibQt5Print Support 中实现的类?
- python - 重复表单数据到 Django 表单
- postgresql - 尝试创建表忽略或未执行 postgresql
- mysql - 如果不存在则插入不插入
- regex - 要捕获的正则表达式:word {word} word
- docker - 在 docker 中运行两个服务节点和 python
- r - 使用 WSL 在 R 中运行 Linux 可执行文件
- firebase - 我可以信任提供给 functions.https.onCall 函数的用户信息吗?
- php - PHP构造函数不同格式
- r - 如何遍历字符向量的 R 列表以通过使所有字符保持在逗号后面并包括一个字符来修改每个元素