Permissions

在對某些對象具有特權的 redshift 中刪除使用者

  • March 3, 2022

我有一個非常標準的問題,我無法解決。我想在 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視圖的形式提供了緩解。它立即辨識出剩餘的依賴關係,從而可以刪除有問題的使用者。

引用自:https://dba.stackexchange.com/questions/143938