簡體   English   中英

Redshift:無法刪除用戶所有者默認權限

[英]Redshift: cannot drop user owner default privileges

我試圖從我的數據庫中刪除一個用戶,但出現錯誤:

user "ted.mosby" cannot be dropped because some objects depend on it
Detail: owner of default privileges on new relations belonging to user ted.mosby in schema tv_shows

如何修復此錯誤並從我的數據庫中刪除用戶?

我已經更改了所有者並且已經撤銷了ted.mosby的所有權限。

在與 AWS Support 聯系並查詢表pg_default_acl ,我意識到我想刪除的用戶具有組默認訪問權限。 所以首先我必須運行:

alter default privileges for user "ted.mosby" grant EXECUTE on functions to public;
alter default privileges for user "ted.mosby" grant all on tables to "ted.mosby";

然后是以下查詢:

select usename, acl.*
from pg_default_acl as acl join pg_user on usesysid = defacluser
where usename = 'ted.mosby';

向我展示了用戶實際所屬的組。

所以如果我嘗試以下

alter default privileges for user "ted.mosby" in schema my_schema 
revoke all on tables FROM group my_schema_group;

但我得到了拒絕的許可。 因此 AWS Support 建議的解決方法是臨時授予創建權限,例如,執行上述命令然后刪除創建權限,方法如下:

grant create on schema my_schema to "ted.mosby";

alter default privileges for user "ted.mosby" in schema my_schema 
revoke all on tables FROM group my_schema_group;

revoke create on schema my_schema from "ted.mosby";

經過上面的查詢,我用同樣的語句再次查詢pg_default_acl ,可以看到被刪除的組沒有更多的記錄。 由於用戶是不同組的一部分,我不得不多次執行它。

從所有組中刪除后,我能夠成功drop user "ted.mosby"

撤銷默認權限:

ALTER DEFAULT PRIVILEGES FOR ROLE "ted.mosby" IN SCHEMA tv_shows
   REVOKE ALL ON TABLES FROM "ted.mosby";

您可以在psql中使用\ddp來查看是否保留了任何默認權限。

我遇到了同樣的問題,但@Laurenz 的回答只是部分幫助了我——我遇到了權限問題,因為在撤銷默認權限之前,我已經將架構的所有權從ted.mosby給了我的主用戶。 長話短說 - 在轉讓所有權之前撤銷默認權限。

重現我的問題(我不知道這是 Redshift 中的錯誤還是預期的行為?):

-- executed with master user redshift_master
CREATE USER anton_test_user PASSWORD '***' IN GROUP redshift_dev;

然后使用anton_test_user

CREATE SCHEMA anton_test_schema;
CREATE TABLE anton_test_schema.anton_test_table AS SELECT 1 AS anton;
ALTER DEFAULT PRIVILEGES IN SCHEMA anton_test_schema 
GRANT SELECT ON TABLES TO GROUP redshift_readonly;

再次使用redshift_master

ALTER SCHEMA anton_test_schema OWNER TO redshift_master;
ALTER TABLE anton_test_schema.anton_test_table OWNER TO redshift_master;

現在嘗試刪除它抱怨默認權限的用戶:

DROP USER anton_test_user;

結果符合預期:

owner of default privileges on new relations belonging to user 
anton_test_user in schema anton_test_schema;

現在到了奇怪的部分,仍然是redshift_master

ALTER DEFAULT PRIVILEGES FOR USER anton_test_user IN SCHEMA anton_test_schema
REVOKE ALL ON TABLES FROM redshift_readonly;

給出Invalid operation: permission denied for schema anton_test_schema 什么?

如果使用anton_test_user運行

ALTER DEFAULT PRIVILEGES IN SCHEMA anton_test_schema
REVOKE ALL ON TABLES FROM redshift_readonly;

同樣給出Invalid operation: permission denied for schema anton_test_schema

我解決這個問題並能夠刪除anton_test_user的唯一方法是使用redshift_master完全刪除模式和表

DROP TABLE anton_test_schema.anton_test_table;
DROP SCHEMA anton_test_schema;
DROP USER anton_test_user; -- it works now

我完全不知情的猜測是anton_test_user已經失去了對架構的權限,因此不能在該架構中應用或撤銷對用戶的授權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM