Permissions
在對某些對象具有特權的 redshift 中刪除使用者
我有一個非常標準的問題,我無法解決。我想在 redshift 中刪除一個
DROP USER u_A;
返回我的使用者:user "u_A" cannot be dropped because the user has a privilege on some object
。問題是我不知道這是什麼特權以及在什麼對像上。
在 PostgreSQL 中,我會
REASSIGN OWNED BY u_A TO u_B
在 u_B 是其他使用者的地方。問題是 redshift 不支持 REASSIGN。我擁有的表和模式的數量太大(所以我不能隨機嘗試一切,希望在某個時候我會刪除所需的權限。那麼如何刪除該使用者?
有一些查詢可以為您提供目前授予使用者對任何對象的權限:
架構 ACL
select nspname as schemaname , array_to_string(nspacl, ',') as acls from pg_namespace where nspacl is not null and nspowner != 1 and array_to_string(nspacl, ',') like '%u_A=%' -- REPLACE USERNAME ;
表 ACL
select pg_namespace.nspname as schemaname , pg_class.relname as tablename , array_to_string(pg_class.relacl, ',') as acls from pg_class left join pg_namespace on pg_class.relnamespace = pg_namespace.oid where pg_class.relacl is not null and pg_namespace.nspname not in ( 'pg_catalog' , 'pg_toast' , 'information_schema' ) and array_to_string(pg_class.relacl, ',') like '%u_A=%' -- REPLACE USERNAME order by pg_namespace.nspname , pg_class.relname ;
特權說明
r -- SELECT ("read") w -- UPDATE ("write") a -- INSERT ("append") d -- DELETE D -- TRUNCATE x -- REFERENCES t -- TRIGGER X -- EXECUTE U -- USAGE C -- CREATE c -- CONNECT T -- TEMPORARY arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects) * -- grant option for preceding privilege /yyyy -- role that granted this privilege
在嘗試了無數文章和執行緒的建議後,awslabs 的**aws-redshift-utils**以admin.v_find_dropuser_objs視圖的形式提供了緩解。它立即辨識出剩餘的依賴關係,從而可以刪除有問題的使用者。