not*_*eek 11 postgresql roles database-administration
我试图删除PostgreSQL用户:
DROP USER ryan;
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
Run Code Online (Sandbox Code Playgroud)Error in query: ERROR: role "ryan" cannot be dropped because some objects depend on it DETAIL: privileges for database mydatabase
我从这些线程中寻找解决方案:
还是有同样的错误.
在我向用户"ryan"授予所有权限后,会发生这种情况:
GRANT ALL PRIVILEGES ON DATABASE mydatabase ON SCHEMA public TO ryan;
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 21
摆脱所有特权(从措辞中不太明显).手册:DROP OWNED
[...]当前数据库和共享对象(数据库,表空间)上的对象上授予给定角色的任何权限也将被撤销.
因此,删除角色的可靠命令序列是:
REASSIGN OWNED BY ryan TO postgres; -- or some other trusted role
DROP OWNED BY ryan;
-- repeat in ALL databases where the role owns anything or has any privileges!
DROP USER ryan;
Run Code Online (Sandbox Code Playgroud)
有关:
Sam*_*ele 15
对我有用的是 1) 连接到数据库
\c mydatabase
Run Code Online (Sandbox Code Playgroud)
2) 重新分配所有权
REASSIGN OWNED BY ryan TO <newuser>;
Run Code Online (Sandbox Code Playgroud)
或/和只是删除对象
DROP OWNED BY ryan;
Run Code Online (Sandbox Code Playgroud)
3) 执行 REVOKE PRIVILEGES
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM ryan;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM ryan;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM ryan;
Run Code Online (Sandbox Code Playgroud)
4)删除用户
DROP USER ryan;
Run Code Online (Sandbox Code Playgroud)
PS:您可能不需要同时执行第 2 步和第 3 步,通常只需执行这两个步骤之一即可。
And*_*rew 11
在 RDS Postgres 13 上对我有用的是什么:
REVOKE ALL PRIVILEGES ON DATABASE <my_db> FROM <my_user>;
我也遇到了类似的错误,其中角色是表的所有者,因此无法删除它,必须使用以下命令重新分配表所有者:
ALTER TABLE <my_table> OWNER TO <trusted_role>;
在 RDS 上进行这样的 REASSIGN 对我来说不起作用,因为 AWS 不会为您的主用户提供完整的超级用户:
REASSIGN OWNED BY <olduser> TO <newuser>;
| 归档时间: |
|
| 查看次数: |
7658 次 |
| 最近记录: |