我希望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 ;
那么第一次拨款的意义何在?!还是我犯了一些错误?
答案 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
,而没有该名称的列的表应该怎么办。您可能会争辩说在那种情况下不应授予任何特权,我想这是一个有效的选择。但是似乎很难为此提供一个用例,这可以解释为什么到目前为止没有人考虑实现这种功能。
或者,您希望将来会添加到现有表中的列应自动获得特权,但是我仍然认为这种功能不是很有用。