はじめに
ユーザー特権と特権アクセス管理は、あらゆる種類のデータベースにとって重要なセキュリティの概念です。 PostgreSQLは、ロールと特権を介してアクセス制御を処理します。たとえば、LOGIN権限をロールに追加すると、ユーザーが生成されます。 Postgresは、ユーザーアカウントを作成および管理するためのいくつかの方法を提供します。
このチュートリアルでは、PostgreSQLデータベースのさまざまなユーザータイプを作成および設定する方法を示します。
前提条件
- Postgresがインストールされています(UbuntuまたはWindowsのガイドに従ってください)。
- sudo権限を持つ端末へのアクセス。
- postgresユーザーへのアクセス。
PostgreSQLで新しいユーザーを作成する
PostgreSQLで新しいユーザーを作成する方法は2つあり、どちらの場合も postgresにアクセスする必要があります ユーザー。
方法1:createuserクライアントユーティリティを使用する
新しいユーザーを作成する最初の方法は、 createuser
を使用することです。 クライアントユーティリティ。この方法では、PSQLコマンドラインインターフェイスへの接続を回避できます。
ユーザーを作成するには、ターミナルで次のコマンドを実行します。
sudo -u postgres createuser <name>
端末はメッセージを出力しません。サーバーメッセージをエコーするには、 -e
を追加します タグ:
sudo -u postgres createuser -e <name>
例:
sudo -u postgres createuser -e john
または、コマンドを2つの部分に分割します。
1. postgresに切り替えます ユーザー:
sudo su - postgres
2. createuser
を実行します コマンド:
createuser <name>
どちらの場合も、Postgresは自動的にユーザー(ログイン権限を持つロール)を作成します。
方法2:PSQLを使用する
PostgreSQLで新しいユーザーを作成する2つ目の方法は、インタラクティブなPSQLシェルを使用することです。
1. postgresに切り替えます ユーザーと次のコマンドでインタラクティブ端末を起動します:
sudo -u postgres psql
ターミナルセッションがpostgres =#
に変わります 、Postgresシェルへの接続が成功したことを示します。
2.次のステートメントを使用して、ユーザーを作成します。
CREATE USER <name>;
例:
CREATE USER mary;
コマンドを実行すると、 CREATE ROLE
が出力されます。 コンソールに。その理由は、 CREATE USER
queryは、次のコマンドのエイリアスです。
CREATE ROLE <name> WITH LOGIN;
どちらのクエリでも同じ結果が得られます。
PostgreSQLでスーパーユーザーを作成する
PostgreSQLでスーパーユーザーを作成するには、スーパーユーザーの役割が必要です。
警告: データベースのスーパーユーザーはすべてのチェックをバイパスしますが、これはセキュリティの観点から危険です。このアクションは慎重に使用し、どうしても必要な場合を除いて、スーパーユーザーアカウントでの作業は避けてください。
PostgreSQLでスーパーユーザーを作成する方法は2つあります。
1. -superuser
を追加して、クライアントユーティリティからスーパーユーザーの役割を作成します タグ:
sudo -u postgres createuser --superuser <name>
または、短縮タグ -s
を使用します -superuser
の代わりに :
sudo -u postgres createuser -s <name>
エラーが発生した場合、またはユーザーがすでに存在する場合、端末はメッセージを出力します。成功した場合、メッセージは表示されません。
2.または、 CREATE USER
を使用します PSQLステートメント:
CREATE USER <name> SUPERUSER;
CREATE USER
ステートメントは、次のステートメントのエイリアスです:
CREATE ROLE <name> LOGIN SUPERUSER;
CREATE ROLE
ステートメントには、 LOGIN
を追加する必要があります ユーザーをエミュレートする権限。
ユーザーのパスワードを作成する
ブルートフォース攻撃を防ぐために、すべてのデータベースユーザーは強力なパスワードを持っている必要があります。 PostgreSQLには、パスワードを使用してユーザーを作成するための2つの方法があります。
警告: 2つの方法のうち、最初の方法が優先され、より安全です。
1. createuser
を使用します クライアントユーティリティを追加し、 -pwprompt
を追加します パスワード作成プロンプトを自動的に呼び出すオプション:
sudo -u postgres createuser <name> --pwprompt
省略形は-P
です。 タグ:
sudo -u postgres createuser <name> -P
端末は、パスワードを2回入力するように求めます。パスワード自体または長さは暗号化され、サーバーとの通信時に非表示になります。
2. PSQLを使用して、パスワードを持つユーザーを作成します。
CREATE USER <name> WITH PASSWORD '<password>';
ユーザーがすでに存在する場合は、 ALTER USER
を使用してパスワードを追加します :
ALTER USER <name> WITH PASSWORD '<password>';
PSQLによるパスワード管理には、次の3つのセキュリティ脆弱性があります。
- パスワードが画面に表示されます。
- コマンド履歴を表示すると、パスワードが公開されます。
- 情報は暗号化なしでクリアテキストとして送信されます。
この方法は注意して使用してください。
ユーザーに権限を付与する
デフォルトでは、新規ユーザーにはログイン以外の権限はありません。ユーザーの作成時に権限を追加するには、 createuser
を実行します 次の形式のクライアントユーティリティ:
createuser <option> <name>
PSQLで同じことを行うには、次を実行します。
CREATE USER <name> WITH <option>;
以下は、両方の方法で一般的に使用されるオプションの表です。
オプションの構文 | PSQL | 説明 |
---|---|---|
-s -スーパーユーザーコード> | SUPERUSER | スーパーユーザー権限を追加します。 |
-S -no-superuser | NOSUPERUSER | スーパーユーザー権限なし(デフォルト)。 |
-d -createdb | CREATEDB | ユーザーがデータベースを作成できるようにします。 |
-D -no-createdb | NOCREATEDB | データベースの作成は許可されていません(デフォルト)。 |
-r -createrole | CREATEROLE | ユーザーが新しい役割を作成できるようにします。 |
-R -no-createrole | NOCREATEROLE | ロールの作成は許可されていません(デフォルト)。 |
-i -継承コード> | 継承 | ロールの権限を自動的に継承します(デフォルト)。 |
-I -継承なしコード> | NOINHERIT | 役割の特権を継承しないでください。 |
-l </ code> -ログインコード> | ログイン | ユーザーがロール名(デフォルト)でセッションにログインできるようにします。 |
-L -ログインなしコード> | NOLOGIN | ロール名でセッションにログインすることは許可されていません。 |
-レプリケーション | レプリケーション | ストリーミングレプリケーションの開始とバックアップモードのアクティブ化/非アクティブ化を許可します。 |
-no-replication | NOREPLICATION | ストリーミングレプリケーションまたはバックアップモードを開始することは許可されていません(デフォルト)。 |
-P -pwprompt | PASSWORD' | パスワード作成プロンプトを開始するか、提供されたパスワードをユーザーに追加します。このオプションを使用してパスワードなしのユーザーを作成することは避けてください。 |
/ | パスワードNULL | 具体的にはパスワードをnullに設定します。このユーザーのすべてのパスワード認証は失敗します。 |
-c -connection-limit = | 接続制限<番号> | ユーザーの接続の最大数を設定します。デフォルトは無制限です。 |
たとえば、ロールとデータベースの作成権限を持つユーザーを作成し、 -e
を追加します 結果をエコーするタグ:
sudo -u postgres createuser -d -r -e <name>
または、同等のPSQLを使用します:
CREATE USER <name> WITH CREATEROLE CREATEDB;
どちらの場合も、指定された特権は新しいユーザーに自動的に付与されます。
PostgreSQLユーザーをインタラクティブに作成する
インタラクティブなユーザー作成は、クライアントユーティリティでのみ使用できる実用的なオプションです。ユーザーをインタラクティブに作成するには、次のコマンドを実行します。
sudo -u postgres createuser --interactive
このコマンドは、次の質問を自動的に実行します。
- 役割の名前。
- 役割がスーパーユーザーであるかどうか。
- ユーザーがデータベースの作成を許可されている場合。
- ユーザーが他の役割を作成することを許可されている場合。
はいと答えます( y
)スーパーユーザーの質問に自動的に追加して、「データベースの作成」と「役割の作成」の権限を追加し、プロンプトを終了します。
PostgreSQLのすべてのユーザーを一覧表示する
データベースでのユーザー管理に不可欠なツールは、すべてのユーザーをそれぞれの役割と特権で一覧表示することです。
PostgreSQLのすべてのユーザーを一覧表示するには、次の手順を実行します。
1.postgresユーザーとしてPSQLプロンプトに接続します。
sudo -u postgres psql
2.次のコマンドを使用して、すべてのユーザーを一覧表示します。
\du
出力には、ロール名、属性(特権)、およびユーザーのグループを含むテーブルが表示されます。各役割の説明を表示するには、プラス( +
)を追加します )記号:
\du+
出力には、該当する場合は役割の説明を含む追加の列が表示されます。