翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Aurora PostgreSQL-Compatible でのアプリケーションユーザーとロールの作成
Abhishek Verma (AWS) によって作成されました
環境:PoC またはパイロット | ソース:任意のデータベース | ターゲット: PostgreSQL データベース |
Rタイプ: リアーキテクト | ワークロード:オープンソース | テクノロジー: 移行、データベース |
AWS サービス: Amazon RDS、Amazon Aurora |
[概要]
Amazon Aurora PostgreSQL-Compatible Edition に移行する場合、ソースデータベースに存在するデータベースユーザーとロールは Aurora PostgreSQL -Compatible データベースで作成する必要があります。Aurora PostgreSQL-Compatible でユーザーとロールを作成するには、次の 2 つの方法があります。
ターゲットではソースデータベースと同様のユーザーとロールを使用します。この方法では、ユーザーとロールのデータ定義言語 (DDL) がソースデータベースから抽出されます。その後、それらは変換され、ターゲットの Aurora PostgreSQL-Compatible データベースに適用されます。たとえば、ブログ記事「SQL で Oracle から PostgreSQL にユーザ、ロールと権限をマッピング」では、Oracle ソースデータベースエンジンからの抽出の使用について説明しています。
開発、管理およびデータベースでのその他の関連操作の実行によく使用される、標準化されたユーザーとロールを使用してください。これには、各ユーザーが実行する読み取り専用、読み取り/書き込み、開発、管理とデプロイ操作が含まれています。
このパターンには、標準化されたユーザーとロールのアプローチに必要な Aurora PostgreSQL -Compatible でのユーザーとロールの作成に必要なグラントが含まれています。ユーザーとロールの作成手順は、データベースユーザーに与える権限を最小限に抑えるというセキュリティポリシーに従っています。次の表は、ユーザー、対応するロールとデータベース上の詳細を示しています。
[ユーザー] | ロール | 目的 |
APP_read
| APP_RO
| スキーマ APP の読み取り専用アクセスに使用されます |
APP_WRITE
| APP_RW
| スキーマ APP の書き込み操作と読み取り操作に使用されます |
APP_dev_user
| APP_DEV
| スキーマ APP_DEV の開発目的で使用され、スキーマ APP への読み取り専用アクセス権が付与されます |
Admin_User
| rds_superuser
| データベースの管理者操作を実行するために使用されます |
APP
| APP_DEP
| APP スキーマの下にオブジェクトを作成し、または APP スキーマにオブジェクトをデプロイするために使用されます
|
前提条件と制限
前提条件
製品バージョン
アーキテクチャ
ソーステクノロジースタック
ターゲットテクノロジースタック
ターゲットアーキテクチャ
次の図は、Aurora PostgreSQL-Compatible データベースのユーザーロールとスキーマアーキテクチャを示しています。
自動化とスケール
このパターンには、ユーザー、ロールとスキーマ作成スクリプトが含まれており、ソースまたはターゲットデータベースの既存ユーザーに影響を与えることなく複数回実行できます。
ツール
AWS サービス
その他のサービス
「psql」は、PostgreSQL データベースをインストールするたびにインストールされるターミナルベースのフロントエンドツールです。SQL、PL-PGSQL とオペレーティングシステムのコマンドを実行するためのコマンドラインインターフェースを備えています。
「pgAdmin」 はPostgreSQL用のオープンソース管理ツールです。データベースオブジェクトの作成、管理、使用を支援するグラフィカルインターフェイスを提供します。
エピック
タスク | 説明 | 必要なスキル |
---|
デプロイユーザーの作成 | デプロイメントユーザー APP は、デプロイ中にデータベースオブジェクトの作成と変更に使用されます。以下のスクリプトを使用して、スキーマ APP にデプロイユーザーロール APP_DEP を作成します。アクセス権を検証して、このユーザーには必要なスキーマ APP 内のオブジェクトを作成する権限のみが付与されていることを確認します。 管理者ユーザーに接続して、スキーマを作成します。 CREATE SCHEMA APP;
ユーザーを作成します。 CREATE USER APP WITH PASSWORD <password> ;
ロールを作成します。 CREATE ROLE APP_DEP ;
GRANT all on schema APP to APP_DEP ;
GRANT USAGE ON SCHEMA APP to APP_DEP ;
GRANT connect on database <db_name> to APP_DEP ;
GRANT APP_DEP to APP;
権限をテストするには、APP に接続してテーブルを作成します。 set search_path to APP;
SET
CREATE TABLE test(id integer ) ;
CREATE TABLE
権限を確認してください。 select schemaname , tablename , tableowner from pg_tables where tablename like 'test' ;
schemaname | tablename | tableowner
APP | test | APP
| DBA |
読み取り専用ユーザーを作成します。 | 読み取り専用ユーザー APP_read は、スキーマ APP の読み取り専用操作を実行するために使用されます。以下のスクリプトを使用して読み取り専用ユーザーを作成します。アクセス権を検証して、このユーザーがスキーマ APP 内のオブジェクトを読み取る権限のみを持っていることおよびスキーマ APP に作成された新しいオブジェクトに対する読み取りアクセス権を自動的に付与する権限を持っていることを確認します。 APP_read ユーザーを作成します。
create user APP_read ;
alter user APP_read with password 'your_password' ;
ロールを作成します。 CREATE ROLE APP_ro ;
GRANT SELECT ON ALL TABLES IN SCHEMA APP TO APP_RO ;
GRANT USAGE ON SCHEMA APP TO APP_RO
GRANT CONNECT ON DATABASE testdb TO APP_RO ;
GRANT APP_RO TO APP_read;
権限をテストするには、APP_read ユーザーを使用してログインします。 set search_path to APP ;
create table test1( id integer) ;
ERROR: permission denied for schema APP
LINE 1: create table test1( id integer) ;
insert into test values (34) ;
ERROR: permission denied for table test SQL state: 42501
select from test
no rows selected
| DBA |
読み取り/書き込みユーザーを作成します。 | 読み取り/書き込みユーザー APP_WRITE は、スキーマ APP の読み取りと書き込み操作の実行に使用されます。以下のスクリプトを使用して読み取り/書き込みユーザーを作成し、そのユーザーに APP_RW ロールを付与します。アクセス権を検証して、このユーザーがスキーマ APP 内のオブジェクトに対してのみ読み取り権限と書き込み権限を持っていることを確認し、スキーマ APP 内に作成された新しいオブジェクトに対する読み取りと書き込みアクセス権を自動的に付与します。 ユーザーを作成します。 CREATE USER APP_WRITE ;
alter user APP_WRITE with password 'your_password' ;
ロールを作成します。 CREATE ROLE APP_RW;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA APP TO APP_RW ;
GRANT CONNECT ON DATABASE postgres to APP_RW ;
GRANT USAGE ON SCHEMA APP to APP_RW ;
ALTER DEFAULT PRIVILEGES IN SCHEMA APP
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO APP_RW ;
GRANT APP_RW to APP_WRITE
権限をテストするには、APP_WRITE ユーザーを使用してログインします。 SET SEARCH_PATH to APP;
CREATE TABLE test1( id integer) ;
ERROR: permission denied for schema APP
LINE 1: create table test1( id integer) ;
SELECT * FROM test ;
id
----
12
INSERT INTO test values (31) ;
INSERT 0 1
| |
管理者ユーザーを作成します。 | 管理者ユーザー Admin_User は、データベースの管理操作を実行するために使用されます。これらの操作の例は CREATE ROLE と CREATE DATABASE Admin_User です。rds_superuser はビルトインロールを使用してデータベースの管理操作を実行します。以下のスクリプトを使用して、データベース内の管理者ユーザー Admin_User の権限を作成してテストします。 ユーザーを作成し、ロールを付与します。 create user Admin_User WITH PASSWORD ‘Your password’
ALTER user Admin_user CREATEDB;
ALTER user Admin_user CREATEROLE;
権限をテストするには、Admin_User ユーザーからログインします。 SELECT * FROM APP.test ;
id
----
31
CREATE ROLE TEST ;
CREATE DATABASE test123 ;
| DBA |
開発ユーザーを作成します。 | 開発ユーザー APP_dev_user には、ローカルスキーマ APP_DEV にオブジェクトを作成する権限とスキーマ APP の読み取りアクセス権が付与されます。以下のスクリプトを使用して、データベース内のユーザー APP_dev_user の権限を作成してテストします。 ユーザーを作成します。 CREATE USER APP1_dev_user with password ‘your password’;
App_dev_user のためにAPP_DEV スキーマを作成します。
CREATE SCHEMA APP1_DEV ;
APP_DEV ロールを作成し、
CREATE ROLE APP1_DEV ;
GRANT APP1_RO to APP1_DEV ;
GRANT SELECT ON ALL TABLES IN SCHEMA APP1_DEV to APP1_dev_user
GRANT USAGE, CREATE ON SCHEMA APP1_DEV to APP1_DEV_USER
GRANT APP1_DEV to APP1_DEV_USER ;
権限をテストするには、APP_dev_user からログインします。 CREATE TABLE APP1_dev.test1( id integer ) ;
CREATE TABLE
INSERT into APP1_dev.test1 ( select * from APP1.test );
INSERT 0 1
CREATE TABLE APP1.test4 ( id int) ;
ERROR: permission denied for schema APP1
LINE 1: create table APP1.test4 ( id int) ;
| DBA |
関連リソース
PostgreSQL ドキュメント
追加情報
PostgreSQL 14 エンハンスメント
PostgreSQL 14 には、事前定義されたロールのセットが用意されており、一般的に必要とされる特定の特権的な機能や情報へのアクセスを可能にしています。管理者 (CREATE ROLE
権限を持つロールを含む) は、これらのロールや環境内の他のロールをユーザーに付与して、指定された機能や情報にアクセスできるようにすることができます。
管理者は GRANT
コマンドを使用してこれらのロールへのアクセス権をユーザーに付与できます。たとえば、pg_signal_backend
ロールに Admin_User
を付与するには、以下のコマンドを実行します。
GRANT pg_signal_backend TO Admin_User;
この pg_signal_backend
ロールは、管理者が信頼できる非スーパーユーザーロールが他のバックエンドにシグナルを送信できるようにすることを目的としています。詳細については、「PostgreSQL 14 の機能拡張」を参照してください。
アクセスの微調整
場合によっては、より詳細なアクセス(テーブルベースのアクセスや列ベースのアクセスなど)をユーザーに提供することが必要になる場合があります。このような場合は、追加ロールを作成して、それらの権限をユーザーに付与することができます。詳細については、「PostgreSQL Grants」を参照してください。