如何为PostgreSQL中的角色授予drop table / function特权?


10

我想将drop特定数据库的特定架构中的所有表和函数(不仅是用户拥有的那些)和特权授予特定角色。然而,GRANT ALL PRIVILEGES这还不够,我没有找到不让该角色成为超级用户的方法,怎么办-超级用户拥有同一服务器上其他数据库的权限,这不是我想要的。我不介意仅限于特定数据库的超级用户特权,但是我不确定该怎么做。

我的代码:

CREATE USER _administrator PASSWORD 'pwd12345';
CREATE ROLE administrator NOLOGIN ADMIN _administrator;

GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator;
GRANT ALL PRIVILEGES ON SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO administrator;

administratormyDB数据库管理员组,_administrator是我的客户端应用程序能够以其身份登录的最强大的角色。

我错过或做错了什么?

Answers:


11

只有所有者(和超级用户)可以放置对象。每个文档:

删除对象或以任何方式更改其定义的权利不视为可授予的特权;它是所有者固有的,不能被授予或撤销。(但是,通过授予或撤消拥有该对象的角色的成员资格,可以获得类似的效果;请参见下文。)所有者也隐式拥有该对象的所有授予选项。

所以,让administrator 自己的这些对象,用户应该能够删除。

ALTER FUNCTION foo() OWNER TO administrator;
ALTER TABLE foo      OWNER TO administrator;

您还记得实际上授予了组成员资格,对吗?

GRANT administrator TO _administrator;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.