PostgreSQL ユーザーを削除しようとしていました:
DROP USER ryan;
次のエラーが発生しました:
Error in query: ERROR: role "ryan" cannot be dropped because some objects depend on it DETAIL: privileges for database mydatabase
私は以下のスレッドから解決策を探しました:
まだ同じエラーが発生します。
これは、次のようにユーザー「ryan」にすべての権限を付与した後に発生します。
GRANT ALL PRIVILEGES ON DATABASE mydatabase ON SCHEMA public TO ryan;
ベストアンサー1
DROP USER
(またはDROP ROLE
ロールがまだ何かを所有しているか、他のオブジェクトに対する権限が付与されている限り、ロールは続行できません (同じことです)。
すべての権限を削除するDROP OWNED
(文面からはあまり明らかではない)。マニュアル:
[...] 現在のデータベース内のオブジェクトと共有オブジェクト (データベース、表領域) に対して指定されたロールに付与された権限もすべて取り消されます。
したがって、ロールを削除するための信頼できるコマンドのシーケンスは次のようになります。
REASSIGN OWNED BY ryan TO placeholder_role; -- some trusted role
DROP OWNED BY ryan;
意図しない権限昇格につながる可能性があるため、スーパーユーザーに再割り当てしないでください。(SECURITY DEFINER
関数について考えてください...)
両方のコマンドを同じクラスターのすべてのデータベースロールが何かを所有しているか、何らかの権限を持っている場合!
そして最後に:
DROP USER ryan;
REASSIGN OWNED
ロールによって現在所有されているすべてのオブジェクトの所有権を変更します。DROP OWNED
その後、権限のみを取り消します (所有権は取り消されます)。
または、 をスキップすることもできますREASSIGN OWNED
。すると、DROP OWNED
ユーザーが所有するすべてのオブジェクトも削除されます。(よろしいですか?!)
関連している:
- 権限を持つロールを削除する (関連するすべてのDBのコマンドを生成する機能付き)
- PostgreSQL ロールにリンクされたオブジェクトを検索する