如何向 PostgreSQL 中的角色授予删除表/函数权限?

Pav*_* V. 12 postgresql permissions

我想将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;
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么或做错了什么?

Erw*_*ter 14

只有所有者(和超级用户)可以删除对象。根据文档:

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

因此,创建administrator 自己的用户应该能够删除的对象。

ALTER FUNCTION foo() OWNER TO administrator;
ALTER TABLE foo      OWNER TO administrator;
Run Code Online (Sandbox Code Playgroud)

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

GRANT administrator TO _administrator;
Run Code Online (Sandbox Code Playgroud)