我正在尝试删除my_schema-writers的角色。我不能因为它拥有物品:
ERROR: role "my_schema-writers" cannot be dropped because some objects depend on it
DETAIL: privileges for table your_schema.your_table
1101 objects in database *******
1 object in database *******
1 object in database *******
1 object in database *******
1 object in database *******果然,它有特权:
my_database=# \dp your_schema.your_table
Access privileges
┌─────────────┬───────────────────┬───────┬────────────────────────────────────────────────────────────┬───────────────────┐
│ Schema │ Name │ Type │ Access privileges │ Column privileges │
├─────────────┼───────────────────┼───────┼────────────────────────────────────────────────────────────┼───────────────────┤
│ your_schema │ your_table │ table │ "your_schema-writers"=arwdDxt/"your_schema-writers" ↵│ │
│ │ │ │ "***-writers"=arwdDxt/"your_schema-writers" ↵│ │
│ │ │ │ "server-superusers"=a*r*w*d*D*x*t*/"your_schema-writers" ↵│ │
│ │ │ │ "server-writers"=arwdDxt/"server-superusers" ↵│ │
│ │ │ │ =r/"server-superusers" ↵│ │
│ │ │ │ "my_schema-writers"=rx/"server-superusers" │ │
└─────────────┴───────────────────┴───────┴────────────────────────────────────────────────────────────┴───────────────────┘
(1 row)也就是说,角色my_schema-writers在your_schema.your_table上拥有特权。
我可以撤销所有特权:
my_database=# REVOKE ALL ON TABLE your_schema.your_table FROM "my_schema-writers";
Time: 1.884 ms但特权仍然存在:
my_database=# \dp your_schema.your_table
Access privileges
┌─────────────┬───────────────────┬───────┬────────────────────────────────────────────────────────────┬───────────────────┐
│ Schema │ Name │ Type │ Access privileges │ Column privileges │
├─────────────┼───────────────────┼───────┼────────────────────────────────────────────────────────────┼───────────────────┤
│ your_schema │ your_table │ table │ "your_schema-writers"=arwdDxt/"your_schema-writers" ↵│ │
│ │ │ │ "***-writers"=arwdDxt/"your_schema-writers" ↵│ │
│ │ │ │ "server-superusers"=a*r*w*d*D*x*t*/"your_schema-writers" ↵│ │
│ │ │ │ "server-writers"=arwdDxt/"server-superusers" ↵│ │
│ │ │ │ =r/"server-superusers" ↵│ │
│ │ │ │ "my_schema-writers"=rx/"server-superusers" │ │
└─────────────┴───────────────────┴───────┴────────────────────────────────────────────────────────────┴───────────────────┘
(1 row)我仍然无法移除这个角色:
ERROR: role "my_schema-writers" cannot be dropped because some objects depend on it
DETAIL: privileges for table your_schema.your_table
1101 objects in database *******
1 object in database *******
1 object in database *******
1 object in database *******
1 object in database *******my_schema-writers不是任何其他角色的成员,也没有成员角色:
rpm_2016_02=# \du "my_schema-writers"
List of roles
┌───────────────────┬──────────────┬───────────┐
│ Role name │ Attributes │ Member of │
├───────────────────┼──────────────┼───────────┤
│ my_schema-writers │ Cannot login │ {} │
└───────────────────┴──────────────┴───────────┘如何删除这些特权和角色?我能够删除1101 objects,其他4个单独的1 object...在备份数据库中是相同的表。
我也尝试了DROP OWNED BY "my_schema-writers";,没有错误,但仍然不能删除角色。
发布于 2018-06-09 01:19:49
我也试过
DROP OWNED BY "my_schema-writers";..。
水滴拥有是正确的工具。另外,如果角色可能拥有任何东西,那么首先使用REASSIGN OWNED。但该手册规定:
DROP OWNED通常用于为删除一个或多个角色做准备。因为DROP OWNED只影响当前数据库中的对象,所以通常需要在每个包含要删除的角色所拥有的对象的数据库中执行此命令。
大胆强调我的。因此,在每个涉及的数据库中重复这一点:
REASSIGN OWNED BY "my_schema-writers" TO postgres; -- or any target role of your choice
DROP OWNED BY "my_schema-writers";当然,您需要对源角色和目标角色的特权。作为超级用户执行此操作可以避免所有“权限拒绝”错误。
然后再试:
DROP ROLE "my_schema-writers";与更多细节密切相关的答案:
REVOKE ALL不按预期工作?你跑了:
my_database=# REVOKE ALL ON TABLE your_schema.your_table FROM "my_schema-writers";您不太乐意,但是psql提示#中的my_database=#通常会将超级用户表示为会话用户。
手册:
用户只能撤销该用户直接授予的特权。例如,如果用户A已将带有授予选项的特权授予用户B,而用户B又将其授予用户C,则用户A不能直接从C撤销该特权。相反,用户A可以从用户B撤销授予选项,并使用
CASCADE选项,以便相应地从用户C撤销该特权。在另一个例子中,如果A和B都将相同的权限授予C,则A可以撤销他们自己的授权,而不是B的授予,因此C仍然有效地拥有该特权。...如果超级用户选择发出GRANT或REVOKE命令,则该命令的执行方式就好像它是由受影响对象的所有者发出的一样。由于所有特权最终都来自对象所有者(可能是通过授予选项链间接获得),所以超级用户可以撤销所有特权,但这可能需要使用上面所述的CASCADE。
特权可能会以这种方式持续存在。如果是这样的话,用CASCADE重复应该删除它们。但我不会费心的。REASSIGN OWNED / DROP OWNED是要走的路。
另一个DB中同名的表(就像您在注释中提到的那样)对Postgres没有影响--只要您没有错误地登录到错误的DB。
撇开:
Postgres 9.2现在太老了(2017年年达到EOL)。考虑尽早更新到当前版本。别指望它会参与其中,但我不确定。只是太旧了。
发布于 2018-06-08 10:05:34
这个:- \dp your_schema.your_table
命令将my_schema-writers显示为select、insert、update等所有特权
跟随下面的事情
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA your_schema FROM my_schema-writers;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA your_schema FROM my_schema-writers; --just incase if you have sequence
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA your_schema FROM my_schema-writers; --just incase if you have functions
DROP USER my_schema-writers;如果仍然无法删除,请尝试REASSIGN OWNED BY
https://dba.stackexchange.com/questions/209045
复制相似问题