首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除表上的持久特权

删除表上的持久特权
EN

Database Administration用户
提问于 2018-06-07 23:21:40
回答 2查看 780关注 0票数 2

我正在尝试删除my_schema-writers的角色。我不能因为它拥有物品:

代码语言:javascript
复制
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 *******

果然,它有特权:

代码语言:javascript
复制
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-writersyour_schema.your_table上拥有特权。

我可以撤销所有特权:

代码语言:javascript
复制
my_database=# REVOKE ALL ON TABLE your_schema.your_table FROM "my_schema-writers";
Time: 1.884 ms

但特权仍然存在:

代码语言:javascript
复制
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)

我仍然无法移除这个角色:

代码语言:javascript
复制
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不是任何其他角色的成员,也没有成员角色:

代码语言:javascript
复制
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";,没有错误,但仍然不能删除角色。

EN

回答 2

Database Administration用户

发布于 2018-06-09 01:19:49

我也试过DROP OWNED BY "my_schema-writers"; ..。

水滴拥有是正确的工具。另外,如果角色可能拥有任何东西,那么首先使用REASSIGN OWNED。但该手册规定:

DROP OWNED通常用于为删除一个或多个角色做准备。因为DROP OWNED只影响当前数据库中的对象,所以通常需要在每个包含要删除的角色所拥有的对象的数据库中执行此命令。

大胆强调我的。因此,在每个涉及的数据库中重复这一点:

代码语言:javascript
复制
REASSIGN OWNED BY "my_schema-writers" TO postgres;  -- or any target role of your choice
DROP OWNED BY "my_schema-writers";

当然,您需要对源角色和目标角色的特权。作为超级用户执行此操作可以避免所有“权限拒绝”错误。

然后再试:

代码语言:javascript
复制
DROP ROLE "my_schema-writers";

与更多细节密切相关的答案:

为什么REVOKE ALL不按预期工作?

你跑了:

代码语言:javascript
复制
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仍然有效地拥有该特权。...如果超级用户选择发出GRANTREVOKE命令,则该命令的执行方式就好像它是由受影响对象的所有者发出的一样。由于所有特权最终都来自对象所有者(可能是通过授予选项链间接获得),所以超级用户可以撤销所有特权,但这可能需要使用上面所述的CASCADE

特权可能会以这种方式持续存在。如果是这样的话,用CASCADE重复应该删除它们。但我不会费心的。REASSIGN OWNED / DROP OWNED是要走的路。

另一个DB中同名的表(就像您在注释中提到的那样)对Postgres没有影响--只要您没有错误地登录到错误的DB。

撇开:

Postgres 9.2现在太老了(2017年年达到EOL)。考虑尽早更新到当前版本。别指望它会参与其中,但我不确定。只是太旧了。

票数 2
EN

Database Administration用户

发布于 2018-06-08 10:05:34

这个:- \dp your_schema.your_table

命令将my_schema-writers显示为select、insert、update等所有特权

跟随下面的事情

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/209045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档