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

PostgreSQLユーザー権限

    PostgreSQLでは、すべてが役割の概念に基づいて構築されています 。

    PostgreSQLをmacOSに最初にインストールしたとき、スクリプトはma​​cOSユーザー名でロールを作成しました 、付与された権限のリスト付き。

    PostgreSQLにはユーザーはなく、役割だけがあります

    psql postgresを実行する ターミナルで、macOSユーザー名を使用してPostgreSQLに自動的にログインするため、作成されたロールにアクセスできます。

    私の場合、 flaviocopes ロールが作成され、 \ duを使用して確認できます コマンド:

    見る?次の役割属性があります デフォルト:

    • スーパーユーザー
    • 役割の作成
    • データベースの作成
    • レプリケーション
    • RLSをバイパスする

    私は他の役割のメンバーではありません(これについては後で詳しく説明します)

    新しい役割の作成

    CREATE ROLEを使用して新しい役割が作成されます コマンド:

    CREATE ROLE <role>;

    例:

    CREATE ROLE testing;

    ログインできませんという新しい役割を取得しました ロール属性。新しく作成したユーザーはログインできなくなります。

    \ qと入力して試すことができます コマンド、次に psql postgres -U tests 、ただし、このエラーが表示されます:

    この問題を修正するには、 LOGINを追加する必要があります 作成時の役割属性:

    CREATE ROLE <role> WITH LOGIN;

    次を使用してその役割を削除した場合:

    DROP ROLE <role>;

    WITH LOGINを追加します 今回:

    DROP ROLE testing;
    CREATE ROLE testing WITH LOGIN;

    テストがわかります ログインできませんがないため、ロールはログインできます 今回の役割属性:

    コマンド\qを追加してみてください 終了してから、 psqlpostgres-Uテスト

    プロンプトに注意してください =#から変更されました =>スーパーユーザーがないため 今すぐ役割属性。

    役割にパスワードを追加する

    前のCREATEROLE コマンドパスワードなしでロールを作成しました。もちろん、(安全な)パスワードを持つことは非常に重要です。 PASSWORDを使用してパスワードを追加できます キーワード:

    CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
    ユーザーの作成

    LOGINを使用して役割を定義する別の方法 自動的に追加される(ログインできるユーザーを効果的に作成する)属性は、 CREATE USERを使用することです。 :

    CREATE USER <role> PASSWORD '<password>';
    ロール属性をロールに追加する

    ロール属性は、後で ALTER ROLEを使用してロールに追加できます。 コマンド。

    LOGIN属性なしでロールを作成したとしましょう:

    CREATE ROLE <username> PASSWORD '<password>';

    次を使用して追加できます:

    ALTER ROLE <role> WITH LOGIN;
    組み込みの役割属性

    LOGINを見ました ロール属性はすでにあり、ロールがログインできるようにします。

    しかし、使用できる他の組み込みの役割属性は何ですか?

    • ログイン / NOLOGIN :PostgreSQLへのログインを許可する(または許可しない)
    • SUPERUSER / NOSUPERUSER :スーパーユーザー権限を許可する(または許可しない)。データベーススーパーユーザーは、 LOGIN を除いて、他の権限チェックをバイパスします (個別に付与する必要があります)。
    • CREATEDB / NOCREATEDB :新しいデータベースを作成する機能を許可する(または許可しない)
    • CREATEROLE / NOCREATEROLE :新しい役割を作成する機能を許可する(または許可しない)
    • CREATEUSER / NOCREATEUSER :新しいユーザーを作成する機能を許可する(または許可しない)
    • 継承 / NOINHERIT :特権を継承可能にする機能を許可する(または許可しない)
    • 複製 / NOREPLICATION :レプリケーション権限を付与する(または付与しない)(ここでは取り上げない高度なトピック)
    グループの役割

    PostgreSQLには、ユーザーのグループはありません。

    代わりに、特定の権限を持つ役割を作成してから、それらの役割を他の役割に付与することができます。

    ロールにINHERIT属性がある場合、ロールは付与されたロールの権限を継承します。

    グループの役割を作成する

    グループの役割を作成するには、次のように入力します

    CREATE ROLE <groupname>;

    構文は、ロールの作成と同じです。

    グループの役割を作成したら、 GRANTを使用してグループの役割に役割を追加できます。 :

    GRANT <groupname> TO <role>

    たとえば、 flavioを作成できます ユーザーの役割、「従業員」のグループの役割、およびユーザーをグループの役割に割り当てます。

    CREATE USER flavio PASSWORD 'superSecret123$';
    CREATE ROLE employee;
    GRANT employee TO flavio;

    次を使用して、グループの役割から役割を削除できます。

    REVOKE <groupname> FROM <username>

    例:

    REVOKE employee FROM flavio;
    グループの役割の属性

    デフォルトでは、グループの役割に役割を追加することはありません。 ロールにグループロールから属性(権限)を継承させます。

    INHERITを使用してグループロールを作成する必要があります 属性。

    従業員グループの役割を作成し、それに CREATEDB<​​/code>を割り当てるとします。 属性:

    CREATE ROLE employee WITH CREATEDB INHERIT;

    次に、 INHERITを使用して新しい役割を作成します :

    CREATE ROLE flavio;
    GRANT employee TO flavio;


    1. oracle-多くの日付形式を単一の形式の日付に変換します

    2. 計画コストの問題点を説明する

    3. 文字列を正しい方法で分割する–または次善の方法

    4. クラスタ化された列ストアインデックスからの削除のシリアル化