ブログに戻る

PostgreSQLにおけるロールの使用方法と権限の管理方法

PostgreSQLにおけるロールの使用方法と権限の管理方法

PostgreSQL は、SQLを使用するオープンソースのDBMSです。これは、VPS上でアプリケーションを管理し、ウェブデータをホストするために使用される非常に強力なツールです。このチュートリアルでは、PostgreSQLで権限を管理する方法を学びます。これにより、アプリケーションのロールに必要な権限を付与できるようになります。このチュートリアルは、Ubuntu 18.04のクラウドサーバー(CloudSigma上)でPostgreSQLを使用して行います。

PostgreSQLのインストール

PostgreSQLをダウンロードしてインストールするには、次のコマンドを実行します。

インストーラーは、操作用のデフォルトユーザー – “Postgres” を作成します。このチュートリアルの大部分では、このユーザーを使用します。次のコマンドでこのユーザーにログインできます。

PostgreSQLがインストールされたので、権限の処理方法について学びます。また、インストールの詳細なステップバイステップガイドについては、UbuntuでのPostgreSQLセットアップに関するチュートリアルを参照することもできます。

PostgreSQLの権限の概念

Postgresは、“ロール”という概念を通じて権限を管理します。ロールを使用すると、ユーザーとグループの区別がなくなります。ロールは、従来のUnixシステムのユーザーとグループよりも柔軟です。たとえば、あるロールが別のロールのメンバーとして機能し、その権限を継承することができます。

PostgreSQLでのロールの表示

PostgreSQLでロールを表示するには、まず次のコマンドを使用してプロンプトにログインする必要があります。

次に、以下を実行してロールを表示します:

show roles manage permissions in PostgreSQL

現時点では、すべての権限を持つデフォルトのロールが1つだけ存在します。

PostgreSQLでロールを作成する方法

Postgresのロールは、コマンドラインから、またはPostgresシェル内から作成できます。次の2つのアプローチを試すことができます。その後、PostgreSQLで権限とアクセスを管理する方法を説明します。

PostgreSQL内からロールを作成する方法

ロールを作成する最も簡単な方法は、Postgresのプロンプト内から行うことです。次のコマンドで実行できます。

作成されたかどうかを確認するには、次のコマンドを実行します:

create role from prompt

新しいロールにはログイン権限がないことが示されています。これを変更する方法については、チュートリアルの後半で説明します。

コマンドラインからロールを作成する方法

上記の方法の代わりに、コマンドラインからユーザーを作成することもできます。PostgreSQLプロンプトを終了するには、次のように入力します。

次のコマンドを使用して、“test”というロールを作成できます。

上記のコマンドを実行したら、psqlにログインし、次のコマンドを使用してロールを一覧表示します。

creating user from commandline

このように作成されたユーザーには、同じ属性がないことがわかります。

PostgreSQLでロールを削除する方法

PostgreSQLでは、次の構文を使用してロールを簡単に削除できます。

次のコマンドを使用して、先ほど作成したデモロールを削除できます。

drop role

存在しないロールを削除しようとすると、エラーが発生します。それを確認するために、同じロールをもう一度削除してみてください。

drop role fail

ロールが存在しない場合にコマンドがエラーをスローしないようにするには、コマンドに‘IF EXISTS’を追加できます。

このコマンドを使用して、ロールの削除を再試行できます。

drop role if exists

ロール作成時に権限を定義する方法

これまでに、ロールの作成と削除を行いました。このセクションでは、権限を変更したロールを作成します。これを行うには、作成コマンドでロールの権限を指定します。

このオプションを表示するには、次のコマンドを使用してヘルプを開きます。

help create user

ログイン権限を持つロールを作成したい場合は、次のようにコマンドを構成できます。

create role with login manage permissions in PostgreSQL

先ほど見たように、ログイン権限を持つロールを作成したい場合は、次のコマンドを使用することもできます。

これら2つのコマンドの唯一の違いは、‘CREATE USER’がデフォルトでロールにログイン権限を付与することです。

PostgreSQLでロールの権限を変更する方法

これまでは、ユーザーの作成時に権限を付与する方法を試してきました。このセクションでは、すでに作成されたユーザーの権限を変更します。alterコマンドの構文は次のとおりです。

たとえば、必要に応じて、次のコマンドでdemo_roleのログイン権限を‘ログイン’に変更できます:

alter nologin

ユーザーに再度ログインを許可するには、次のコマンドで権限を変更できます:

PostgreSQLで別のユーザーとしてログインする方法

PostgreSQLでは、デフォルトでユーザー名がシステムユーザー名と一致する場合にのみ、ローカルでのログインが許可されます。これを回避するには、ログインタイプを変更するか、ループバックネットワークインターフェースを使用するようにPostgreSQLを設定します。このインターフェースを使用すると、接続がローカルであっても、接続タイプがリモートに変更されます。

このセクションでは、2番目の方法を試します。まず、認証を可能にするためにユーザーのパスワードを設定します。

次のコマンドで‘demo_user’のパスワードを設定します:

プロンプトが表示されたら、パスワードを入力して確認します。完了したら、PostgreSQLインターフェースを終了して、通常のマシンユーザーに戻ることができます:

PostgreSQLでは、オペレーティングシステムのユーザー名と一致するユーザー名でログインし、同じユーザー名でデータベースに接続する必要があります。今回はそれを行わないため、使用するオプションを明示的に指定する必要があります。次の構文を使用できます:

user: 接続に使用するユーザー名
DB: アクセス権限のある既存のデータベース
-h 127.0.0.1: ネットワークインターフェースを介してローカルマシンに接続することをPostgreSQLに指定します。このオプションを使用すると、ユーザー名がシステムユーザー名と一致しない場合でも認証が可能になります。
-W: パスワードを入力することをPostgreSQLに指示します

「test_user」でログインするには、次のコマンドを実行します:

postgresql login through network interface manage permissions in PostgreSQL

パスワードを入力すると、シェルにログインします。この例では、インストール時に自動的にセットアップされるデフォルトのデータベースである‘postgres’を使用します。

このセクションでは、ログインに選択したユーザーによっては、さまざまなアクションを実行するための適切な権限がないという問題が発生します。この問題の原因は、管理に必要な十分な権限をユーザーにまだ付与していないためです。

次のセクションでは、ユーザーに必要な権限を付与します。まず、ユーザーを管理者ユーザーに戻す必要があります:

PostgreSQLでの権限管理:PostgreSQLで権限を付与する方法

PostgreSQLでは、特定のロールによってデータベースまたはテーブルが作成された場合、そのロールのみがそれを変更する権限を持ちます。これに対する例外は、スーパーユーザー権限を持つロールです。このセクションでは、他のロールに権限を付与します。‘GRANT’ステートメントを使用して、他のロールに権限を付与できます。構文は次のとおりです:

コマンドを実行するために、シンプルなテーブルを作成できます。

作成されたテーブルを確認するには、次のコマンドを実行します。

create table manage permissions in PostgreSQL

デモテーブルが作成されたので、‘demo’テーブルの権限を‘demo_role’に付与できます。次のコマンドを使用して、ロールに‘UPDATE’権限を付与できます。

権限として‘ALL’を指定することで、ロールにすべての権限を付与できます。

システム上のすべてのロールに特定の権限を付与したい場合は、次のコマンドのようにロールの代わりにキーワード‘public’を使用できます。

次のコマンドを使用して、付与されているすべての権限を表示できます。

granted permissions

PostgreSQLでの権限管理:PostgreSQLで権限を削除する方法

‘REVOKE’コマンドを使用して、ロールの権限を簡単に削除できます。これはgrantコマンドと非常によく似ています。

GRANTと同様に、キーワード – ‘ALL’ および ‘PUBLIC’ を使用して、すべての権限を剥奪したり、すべてのロールから権限を剥奪したりできます:

PostgreSQLでグループロールを使用する方法

広範囲な権限管理を可能にするため、ロールは他のロールとグループ化できる柔軟性を備えています。たとえば、ロール – ‘temporary_role’ を作成し、そのロールに ‘demo_role’ と ‘test_user’ を追加できます。

これで、‘temporary_role’ ロールの権限を管理するだけで、これら2つのロールの権限を管理できるようになります。これにより、権限の管理が容易になります。次のコマンドを使用して、ロールのメンバーシップ情報を確認できます。

role - group manage permissions in PostgreSQL

グループのメンバーは、‘set role’ コマンドを使用してグループとして動作できます。‘postgres’ ユーザーはスーパーユーザーであるため、グループのメンバーでなくても ‘set role’ を使用できます。

今後作成するテーブルはすべて temporary_role が所有することになります。

テーブルの所有権を確認するには、次のコマンドを実行します。

create table with temporary_role

‘temporary_role’ ロールが新しいテーブルと、serialデータ型に関連付けられたシーケンスを所有していることがわかります。元のロール権限に戻すには、次のコマンドを実行します。

所属するロールのすべての権限をそのロールに継承させたい場合は、‘alter role’ コマンドで ‘inherit’ プロパティを指定できます。

上記のコマンドにより、‘test_user’ は所属するロールのすべての権限を取得しました。ロールを削除するには、‘drop role’ コマンドを使用できます。

drop role manage permissions in PostgreSQL

テーブル ‘hello’ など、このロールに依存するオブジェクトが存在するため、上記のコマンドはエラーをスローします。削除するには、テーブルの所有権を別のロールに譲渡できます。

次のコマンドを使用して、temporary_role が現在どのテーブルも所有していないことを確認できます。

check ownerships

依存関係がなくなったため、‘temporary_role’ を削除できます。

上記のコマンドによって temporary_users ロールは削除されますが、そのロールグループの以前のメンバーは削除されません。

結論

チュートリアルはこれで終了です。PostgreSQLでの権限の管理方法を習得できました。これで権限を簡単に管理できるようになります。権限の管理方法を理解しておくことで、アプリケーションが必要なデータベースにアクセスできるようにしつつ、別のアプリケーションが使用する他のデータベースにはアクセスできないようにすることができます。

快適なコンピューティングを!

author

Akshay Nagpal

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。