如何在 SQLPlus 中撤销用户的所有权限?我已登录,sysdba并且我想撤销普通用户的所有权限。
我用谷歌搜索了这个查询
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
Run Code Online (Sandbox Code Playgroud)
但我不明白我应该为用户提供什么,等等。
数据库“mydb”由角色“mydb_owner”拥有。
用户“currentuser”尝试使用以下命令从此数据库中删除角色“roletodelete”
revoke all on all tables in schema public,firma1 from "roletodelete" cascade;
revoke all on all sequences in schema public,firma1 from "roletodelete" cascade;
revoke all on database mydb from "roletodelete" cascade;
revoke all on all functions in schema public,firma1 from "roletodelete" cascade;
revoke all on schema public,firma1 from "roletodelete" cascade;
revoke mydb_owner from "roletodelete" cascade;
ALTER DEFAULT PRIVILEGES IN SCHEMA public,firma1 revoke all ON TABLES from "roletodelete";
GRANT "roletodelete" TO "currentuser";
reassign owned by "roletodelete" to mydb_owner;
drop owned …Run Code Online (Sandbox Code Playgroud) 我正在使用 PostgreSQL 10.4,我发现了一个奇怪的行为。
如果我们创建一个角色并将其授予CONNECT数据库:
CREATE ROLE dummy;
GRANT CONNECT ON DATABASE test TO dummy;
Run Code Online (Sandbox Code Playgroud)
然后我们不能删除这个角色,即使它根本不拥有任何对象,这个命令:
DROP ROLE dummy;
Run Code Online (Sandbox Code Playgroud)
提高:
ERROR: role "dummy" cannot be dropped because some objects depend on it
SQL state: 2BP01
Detail: privileges for database test
Run Code Online (Sandbox Code Playgroud)
文档有点误导:
2B 类 — 依赖特权描述符仍然存在
2B000dependent_privilege_descriptors_still_exist
2BP01dependent_objects_still_exist
它说依赖对象仍然存在,但似乎没有依赖于这个特定角色的对象,它在数据库上没有任何东西。
无论如何,如果我们撤销CONNECT特权,那么角色可以被删除:
REVOKE CONNECT ON DATABASE test FROM dummy;
DROP ROLE dummy;
Run Code Online (Sandbox Code Playgroud)
我刚刚检查了 PostgreSQL 9.5 上也存在该行为。我觉得有点奇怪,我不明白为什么这个特定的特权会导致删除角色失败。
其他观察
这真的是阻塞,因为我们既不能重新分配这个对象:
REASSIGN OWNED BY dummy TO postgres;
Run Code Online (Sandbox Code Playgroud)
也不丢弃对象:
DROP OWNED …Run Code Online (Sandbox Code Playgroud) sql-revoke ×3
postgresql ×2
privileges ×2
sql ×2
ddl ×1
dependencies ×1
oracle ×1
roles ×1
sql-grant ×1
sqlplus ×1