すべてのコマンドは、適切なデータベースクラスターに接続しているときに実行する必要があります。確認してください。
ロールはデータベースのオブジェクトですクラスター 。同じクラスターのすべてのデータベースは、定義された役割のセットを共有します。特権は、データベース/スキーマ/テーブルなどごとに付与/取り消されます。
ロールはデータベースにアクセスする必要があります 、 明らかに。これは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の特定のデータベースに権限を付与する
- ビューに対するすべての権限を任意のユーザーに付与する方法
現在のバージョンへのアップグレードを検討してください。