すべてのコマンドは、適切なデータベースクラスターに接続しているときに実行する必要があります。確認してください。
ロールはデータベースのオブジェクトですクラスター 。同じクラスターのすべてのデータベースは、定義された役割のセットを共有します。特権は、データベース/スキーマ/テーブルなどごとに付与/取り消されます。
ロールはデータベースにアクセスする必要があります 、 明らかに。これはPUBLICに付与されます デフォルトでは。それ以外の場合:
GRANT CONNECT ON DATABASE my_db TO my_user;
Postgres14以降の基本的な権限
Postgres 14は、事前定義された非ログインロール pg_read_all_dataを追加します / pg_write_all_data 。SELECTがあります / INSERT 、UPDATE 、DELETE すべての権限 テーブル、ビュー、およびシーケンス。さらに、USAGE スキーマについて。 GRANT これらの役割のメンバーシップ:
GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;
これは、すべての基本的なDMLコマンドを対象としています(ただし、DDLは対象外であり、TRUNCATEなどの特別なコマンドは対象外です。 またはEXECUTE 関数の特権!)。マニュアル:
pg_read_all_data
SELECTがあるかのように、すべてのデータ(テーブル、ビュー、シーケンス)を読み取ります それらのオブジェクトを右揃えにし、USAGE明示的に持っていなくても、すべてのスキーマに対する権限。この役割には役割属性BYPASSRLSがありません セットする。 RLSが使用されている場合、管理者はBYPASSRLSを設定することをお勧めします この役割がGRANTである役割について edto。
pg_write_all_data
INSERTがあるかのように、すべてのデータ(テーブル、ビュー、シーケンス)を書き込みます 、UPDATE、およびDELETEそれらのオブジェクトに対する権利、およびUSAGE明示的に持っていなくても、すべてのスキーマに対する権利。このロールには、ロール属性BYPASSRLSはありません。 セットする。 RLSが使用されている場合、管理者はBYPASSRLSを設定することをお勧めします。 この役割がGRANTである役割について edto。
事前定義されたロールを使用しないすべての特権(Postgresバージョン)
コマンドは、適切なデータベースに接続しているときに実行する必要があります。確認してください。
役割には(少なくとも)USAGEが必要です スキーマの特権 。繰り返しますが、それがPUBLICに付与されている場合 、あなたは覆われています。それ以外の場合:
GRANT USAGE ON SCHEMA public TO my_user;
または、USAGEを付与します すべて カスタムスキーマ:
DO
$$
BEGIN
-- RAISE NOTICE '%', ( -- use instead of EXECUTE to see generated commands
EXECUTE (
SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
FROM pg_namespace
WHERE nspname <> 'information_schema' -- exclude information schema and ...
AND nspname NOT LIKE 'pg\_%' -- ... system schemas
);
END
$$;
次に、すべてのテーブルに対するすべての権限 (Postgres 9.0が必要です またはそれ以降)。
そしてシーケンスを忘れないでください (もしあれば):
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;
または、pgAdmin4の「GrantWizard」を使用してGUIを操作することもできます。
他にもいくつかのオブジェクトがあります。GRANTのマニュアルです。 完全なリストがあります。 Postgres 12の時点:
データベースオブジェクト(テーブル、列、ビュー、外部テーブル、シーケンス、データベース、外部データラッパー、外部サーバー、関数、プロシージャ、プロシージャ言語、スキーマ、またはテーブルスペース)に対する特権
しかし、残りが必要になることはめったにありません。詳細:
- データベースとスキーマのユーザーのデフォルトの特権を管理するにはどうすればよいですか?
- PostgreSQLの特定のデータベースに権限を付与する
- ビューに対するすべての権限を任意のユーザーに付与する方法
現在のバージョンへのアップグレードを検討してください。