PostgreSQL データベースへのユーザーアクセスのコントロール
PostgreSQL の新しいデータベースは、常にデータベースの public
スキーマに、すべてのデータベースユーザーとロールがオブジェクトを作成できるようなデフォルトの権限セットで作成されます。これらの権限により、例えば、データベースユーザーがデータベースに接続し、接続しながら一時テーブルを作成することができます。
Aurora PostgreSQL DB クラスターのプライマリノード に作成するデータベースインスタンスへのユーザーアクセスをよりよく制御するために、これらのデフォルトの public
権限を取り消すことを推奨します。その後、次の手順で示すように、データベースのユーザーに特定の権限をより詳細に付与します。
新しいデータベースインスタンスのロールと権限を設定するには
全員がデータベースへの読み取り/書き込みアクセスを必要とする複数の研究者が使用するために、新しく作成された Aurora PostgreSQL DB クラスター 上にデータベースをセットアップしているとします。
psql
(または pgAdmin) を使用して、Aurora PostgreSQL DB クラスター上のプライマリ DB インスタンス に接続します。psql --host=
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordプロンプトが表示されたら、パスワードを入力します。
psql
クライアントが接続し、プロンプトとしてデフォルトの管理用接続データベースであるpostgres=>
を表示します。データベースユーザーが
public
スキーマでオブジェクトを作成できないようにするには、次の操作を行います。postgres=>
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE
次に、新しいデータベースインスタンスを作成します。
postgres=>
CREATE DATABASE
lab_db
;CREATE DATABASE
この新しいデータベースの
PUBLIC
スキーマからすべての権限を取り消します。postgres=>
REVOKE ALL ON DATABASE
lab_db
FROM public;REVOKE
データベースユーザーのロールを作成します。
postgres=>
CREATE ROLE
lab_tech
;CREATE ROLE
このロールを持つデータベースユーザーに、データベースに接続する機能を付与します。
postgres=>
GRANT CONNECT ON DATABASE
lab_db
TOlab_tech
;GRANT
lab_tech
ロールを持つすべてのユーザーに、このデータベースのすべての権限を付与します。postgres=>
GRANT ALL PRIVILEGES ON DATABASE
lab_db
TOlab_tech
;GRANT
次のように、データベースユーザーを作成します。
postgres=>
CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me';
CREATE ROLE
postgres=>
CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me';
CREATE ROLE
-
これら 2 人のユーザーに lab_tech ロールに関連付けられた権限を付与します。
postgres=>
GRANT lab_tech TO lab_user1;
GRANT ROLE
postgres=>
GRANT lab_tech TO lab_user2;
GRANT ROLE
この時点で、lab_user1
と lab_user2
は lab_db
データベースに接続できます。この例は、複数のデータベースインスタンスの作成、異なるスキーマの作成、制限されたアクセス許可の付与などを含む、エンタープライズで使用するためのベストプラクティスに従ったものではありません。詳細な情報と追加のシナリオについては、「PostgreSQL ユーザーとロールの管理
PostgreSQL データベースでの権限の詳細については、PostgreSQL のドキュメントの GRANT