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 DATABASElab_db;CREATE DATABASE -
この新しいデータベースの
PUBLICスキーマからすべての権限を取り消します。postgres=>REVOKE ALL ON DATABASElab_dbFROM public;REVOKE -
データベースユーザーのロールを作成します。
postgres=>CREATE ROLElab_tech;CREATE ROLE -
このロールを持つデータベースユーザーに、データベースに接続する機能を付与します。
postgres=>GRANT CONNECT ON DATABASElab_dbTOlab_tech;GRANT -
lab_techロールを持つすべてのユーザーに、このデータベースのすべての権限を付与します。postgres=>GRANT ALL PRIVILEGES ON DATABASElab_dbTOlab_tech;GRANT -
次のように、データベースユーザーを作成します。
postgres=>CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me';CREATE ROLEpostgres=>CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me';CREATE ROLE -
これら 2 人のユーザーに lab_tech ロールに関連付けられた権限を付与します。
postgres=>GRANT lab_tech TO lab_user1;GRANT ROLEpostgres=>GRANT lab_tech TO lab_user2;GRANT ROLE
この時点で、lab_user1 と lab_user2 は lab_db データベースに接続できます。この例は、複数のデータベースインスタンスの作成、異なるスキーマの作成、制限されたアクセス許可の付与などを含む、エンタープライズで使用するためのベストプラクティスに従ったものではありません。詳細な情報と追加のシナリオについては、「PostgreSQL ユーザーとロールの管理
PostgreSQL データベースでの権限の詳細については、PostgreSQL のドキュメントの GRANT