PostgreSQLでは、すべてが役割の概念に基づいて構築されています 。
PostgreSQLをmacOSに最初にインストールしたとき、スクリプトはmacOSユーザー名でロールを作成しました 、付与された権限のリスト付き。
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;