sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL:PostgreSQLデータベースのユーザーにすべての権限を付与します

    すべてのコマンドは、適切なデータベースクラスターに接続しているときに実行する必要があります。確認してください。

    ロールはデータベースのオブジェクトですクラスター 。同じクラスターのすべてのデータベースは、定義された役割のセットを共有します。特権は、データベース/スキーマ/テーブルなどごとに付与/取り消されます。

    ロールはデータベースにアクセスする必要があります 、 明らかに。これはPUBLICに付与されます デフォルトでは。それ以外の場合:

    GRANT CONNECT ON DATABASE my_db TO my_user;
    

    Postgres14以降の基本的な権限

    Postgres 14は、事前定義された非ログインロール pg_read_all_dataを追加します / pg_write_all_data
    SELECTがあります / INSERTUPDATEDELETE すべての権限 テーブル、ビュー、およびシーケンス。さらに、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の特定のデータベースに権限を付与する
    • ビューに対するすべての権限を任意のユーザーに付与する方法

    現在のバージョンへのアップグレードを検討してください。



    1. Neo4jについて

    2. SQLServerのパフォーマンスを容易にする

    3. PostgreSQL 13libpqsslpassword接続パラメータの概要

    4. SQLServerでSelectQueryをすばやく作成する方法-SQLServer/TSQLチュートリアルパート108