簡體   English   中英

許多撥款后刪除postgres角色和數據庫

[英]Dropping postgres role and database after many grants

我正在嘗試有效地從postgres實例中drop role ,並遇到一些問題。 我正在尋找一些SQL來drop role以便我可以停止閱讀錯誤消息而不必手動執行此操作。

在我正在使用的設置中,每個角色都有自己的同名數據庫:

CREATE ROLE alpha_user;
CREATE DATABASE alpha_user;
ALTER DATABASE alpha_user OWNER TO alpha_user;

用戶通常將對其數據庫中的模式的訪問權限授予其他用戶:

-- alpha_user logs in to the alpha_user database
GRANT USAGE ON SCHEMA myschema TO beta_user;

當我嘗試刪除beta_user ,會發生以下情況:

-- log in as superuser
DROP ROLE beta_user;
-- ERROR:  role "beta_user" cannot be dropped because some objects depend on it
-- DETAIL:  N objects in database alpha_user

我可以連接到alpha_user數據庫,並刪除OWNED BY ,但效率很低:

-- log in as superuser
\c alpha_user;
DROP OWNED BY beta_user CASCADE;
DROP beta_user;
-- success

用戶可以授予對任意數量的數據庫的訪問權限,並且有許多用戶。 是否存在超級用戶可以在用戶被授予訪問權限的所有數據庫中為用戶執行DROP OWNED BY的語句(或一系列語句)?

也許這會對你有所幫助:

with 
  user_id as (select oid, rolname as my_user from pg_authid where rolname in('abc', 'xyz'))
select 'REVOKE ' || rolname || ' FROM ' || my_user || ' CASCADE;' as sql
from pg_auth_members
join pg_authid on pg_auth_members.roleid = pg_authid.oid  
JOIN user_id ON pg_auth_members.member = user_id.oid
union 
SELECT 'REVOKE ALL ON ' || datname || ' FROM ' || my_user || ' CASCADE;' 
FROM pg_database 
JOIN user_id ON pg_database.datdba = user_id.oid

暫無
暫無

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

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