PostgreSQLユーザー権限

このチュートリアルでは、PostgreSQLでユーザーと権限を管理する方法について説明します。

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

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

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

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

私の場合、flaviocopes役割が作成され、を使用してそれを見ることができます\duコマンド:

見る?私は以下を持っています役割属性デフォルト:

  • Superuser
  • Create role
  • Create DB
  • Replication
  • Bypass RLS

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

新しい役割の作成

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

CREATE ROLE <role>;

例えば:

CREATE ROLE testing;

私たちは新しい役割を手に入れましたCannot loginロール属性。新しく作成したユーザーはログインできなくなります。

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

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

CREATE ROLE <role> WITH LOGIN;

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

DROP ROLE <role>;

と追加WITH LOGIN今回:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

私たちはそれを見ることができますtesting役割はログインできません。Cannot login今回の役割属性:

コマンドを追加してみてください\qやめる、そしてpsql postgres -U testing

に注意してください促すから変更=#=>持っていないのでSuperuser役割属性になりました。

ロールへのパスワードの追加

前にCREATE ROLEコマンドパスワードなしでロールを作成しました。もちろん、(安全な)パスワードを持つことは非常に重要です。を使用してパスワードを追加できます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ロール属性はすでにあり、ロールがログインできるようにします。

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

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

グループの役割

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

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

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

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

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

CREATE ROLE <groupname>;

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

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

GRANT <groupname> TO <role>

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

CREATE USER flavio PASSWORD 'superSecret123
;CREATE 役割社員;付与社員フラビオ;

以下を使用して、グループロールからロールを削除できます。

REVOKE <groupname> FROM <username>

例:

REVOKE employee FROM flavio;

グループの役割の属性

デフォルトでは、グループロールにロールを追加するとないロールにグループロールから属性(権限)を継承させます。

でグループの役割を作成する必要がありますINHERIT属性。

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

CREATE ROLE employee WITH CREATEDB INHERIT;

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

CREATE ROLE flavio;
GRANT employee TO flavio;


その他のデータベースチュートリアル: