使用PostgreSQL 9.0,我有一个名为"staff"的组角色,并希望在特定模式的表上授予此角色所有(或某些)特权.以下工作均不适用
GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;
Run Code Online (Sandbox Code Playgroud)
除非我在该特定表上授予所有表,否则 "staff"的成员仍然无法对模式"foo"中的各个表或(在第二个命令的情况下)对数据库中的任何表进行SELECT或UPDATE .
我能做些什么让我和我的用户的生活更轻松?
更新:借助serverfault.com上的类似问题计算出来.
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;
Run Code Online (Sandbox Code Playgroud) 我之前读过以下问题:在PostgreSQL中将来的表上授予特权?。
但是,如果我以rbourgeon(超级用户)身份登录时运行以下查询:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES IN SCHEMA myschema TO username;
Run Code Online (Sandbox Code Playgroud)
我注意到,该用户username仅在我创建的将来表上具有特权,而在所有将来表上均没有特权。
该官员PostgreSQL文档,在这个问题上,写着:
ALTER DEFAULT PRIVILEGES允许您设置将应用于将来创建的对象的特权。(这不会影响分配给已经存在的对象的特权。)当前,只能更改表(包括视图),序列和函数的特权。
您只能更改将由您自己或您所属的角色创建的对象的默认特权。可以全局设置特权(即,针对当前数据库中创建的所有对象),也可以仅针对指定架构中创建的对象设置特权。根据架构指定的默认特权将添加到特定对象类型的所有全局默认特权中。
有解决方法吗?因为许多用户可能在此数据库中创建表。