![](/img/trans.png)
[英]Unable to drop user because I cannot revoke default priviliges in 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.