PostgreSQL ロールを削除できません。エラー: `一部のオブジェクトが依存しているため削除できません` 質問する

PostgreSQL ロールを削除できません。エラー: `一部のオブジェクトが依存しているため削除できません` 質問する

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ユーザーが所有するすべてのオブジェクトも削除されます。(よろしいですか?!)

関連している:

おすすめ記事