Oracle データベースから移行する場合や、大規模な権限管理を行う場合、各ユーザーにオブジェクトやスキーマへのアクセス権限を付与するのは面倒なプロセスです。このプロセスを簡素化するために、PolarDB は Oracle と互換性のあるシステム権限フレームワークを提供します。単一のコマンドで、すべてのテーブルやビューなど、あるクラスのオブジェクトに対するグローバルな権限をユーザーに付与できます。これにより、データベースの操作と管理の効率が向上します。
適用性
お使いの PolarDB for PostgreSQL (Compatible with Oracle) クラスターのマイナーエンジンバージョンが 2.0.14.18.37.0 以降である必要があります。
コンソールでマイナーエンジンバージョン番号を表示するか、SHOW polardb_version; 文を実行してバージョンを確認できます。クラスターがバージョン要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードしてください。
システム権限の有効化と使用
このセクションでは、機能の有効化、ユーザーの作成、権限の付与、権限の検証というプロセス全体について説明します。
ステップ 1: システム権限機能を有効にする
システム権限機能は、デフォルトで無効になっています。この機能を使用するには、PolarDB コンソールのページに移動してpolar_enable_system_privilege パラメーターを有効にする必要があります。
ステップ 2: システム権限を付与する
前提条件
システム権限の GRANT 文を実行できるのは、次の 3 種類のユーザーのみです。
特権アカウント。
GRANT ANY PRIVILEGE権限が付与された標準アカウント。WITH ADMIN OPTION句でシステム権限を付与された標準アカウント。このアカウントは、自身が保持する特定の権限のみを付与できます。
構文
GRANT sys_priv1 [, sys_priv2 ...] TO my_user_or_role1 [, my_user_or_role2 ...] [ WITH ADMIN OPTION ];一度に 1 つ以上のユーザーまたはロールに 1 つ以上のシステム権限を付与できます。
システム権限
sys_privにはいくつかの種類があります。詳細については、「システム権限」をご参照ください。WITH ADMIN OPTION句を指定すると、被付与者は他のユーザーまたはロールに権限を付与できます。
例
開発者 dev_user に、任意のスキーマでテーブルを作成し、テーブルをクエリする権限を付与します。
テスト用に標準アカウントを作成します。
CREATE USER dev_user WITH PASSWORD 'Your_Secure_Password123';dev_userに、スキーマをまたいでテーブルを作成およびクエリするシステム権限を付与します。GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user;(オプション)
dev_userがこれらの権限を他のユーザーに付与できるようにする場合は、WITH ADMIN OPTION句を追加します。-- dev_user に権限を付与し、他のユーザーへの権限付与を許可します。 GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user WITH ADMIN OPTION;
ステップ 3: 権限を検証する
dev_user に付与された権限があることを確認します。
dev_userユーザーとしてデータベースに再接続します。所有していないスキーマにテーブルを作成し、データを挿入してみます。
CREATE TABLE public.my_test_table (id INT); INSERT INTO public.my_test_table VALUES (1);テーブルをクエリして
SELECT ANY TABLE権限を検証します。SELECT * FROM public.my_test_table;期待される出力は次のとおりです。
id ---- 1
上記の操作がすべて成功した場合、システム権限は有効です。
ステップ 4: 権限の管理とクエリ
付与されたシステム権限を表示または取り消します。
権限のクエリ
DBA_SYS_PRIVSビューをクエリして、すべてのユーザーのシステム権限を確認します。説明特定のユーザーをクエリする場合は、ユーザー名を大文字に変換してください。
-- この文は特権アカウントとして実行します。 SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION FROM DBA_SYS_PRIVS WHERE GRANTEE = 'DEV_USER';期待される出力は次のとおりです。
grantee | privilege | admin_option ----------+------------------+-------------- DEV_USER | CREATE ANY TABLE | YES DEV_USER | SELECT ANY TABLE | YESUSER_SYS_PRIVSビューで現在のユーザーのシステム権限を表示できます。-- dev_user によって実行 SELECT PRIVILEGE, ADMIN_OPTION FROM USER_SYS_PRIVS;期待される出力:
privilege | admin_option ------------------+-------------- CREATE ANY TABLE | YES SELECT ANY TABLE | YES
結果では、grantee は権限が付与されたユーザーまたはロールです。privilege は権限の名前です。admin_option が YES の場合、被付与者は他のユーザーまたはロールに権限を付与できます。
権限の取り消し
構文
REVOKE sys_priv1 [, sys_priv2 ...] FROM my_user_or_role1 [, my_user_or_role2 ...];例
REVOKE コマンドを使用して、ユーザーからシステム権限を取り消します。
-- この文は特権アカウントとして実行します。
REVOKE CREATE ANY TABLE, SELECT ANY TABLE FROM dev_user;システム権限
次の表に、PolarDB でサポートされているシステム権限とその機能を示します。
カテゴリ | 権限名 | 許可される操作 |
|
| プライベートまたはパブリック DBLink を作成します。PolarDB はこれらを区別しません。 |
| プライベートまたはパブリック DBLink を変更します。PolarDB はこれらを区別しません。 | |
| プライベートまたはパブリック DBLink を削除します。 | |
|
| ディレクトリを作成します。 |
|
| 任意のユーザースキーマにインデックスを作成します。 |
| 任意のユーザースキーマのインデックスを変更します。 | |
| 任意のユーザースキーマのインデックスを削除します。 | |
|
| ユーザー自身のスキーマにマテリアライズドビューを作成します。 |
| 任意のユーザースキーマにマテリアライズドビューを作成します。 | |
| 任意のユーザースキーマのマテリアライズドビューを変更します。 | |
| 任意のユーザースキーマのマテリアライズドビューを削除します。 | |
|
| ユーザー自身のスキーマにオペレーターを作成します。 |
| 任意のユーザースキーマにオペレーターを作成します。 | |
|
| 任意のシステム権限を付与します。 |
|
| ユーザー自身のスキーマにストアドプロシージャ、関数、およびパッケージを作成します。 |
| 任意のユーザースキーマにストアドプロシージャ、関数、およびパッケージを作成します。 | |
|
| ユーザーまたはロールを作成します。PolarDB は権限検証のためにこれらを区別しません。 |
| ユーザーまたはロールを変更します。 | |
| ユーザーまたはロールを削除します。 | |
| ユーザーまたは別のロールにロールを付与します。 | |
|
| ユーザー自身のスキーマにシーケンスを作成します。 |
| 任意のユーザースキーマにシーケンスを作成します。 | |
| 任意のユーザースキーマのシーケンスを変更します。 | |
| 任意のユーザースキーマのシーケンスを削除します。 | |
|
| ユーザー自身のスキーマにシノニムを作成します。 |
| 任意のユーザースキーマにシノニムを作成します。 | |
| パブリックシノニムを作成します。 | |
| 任意のユーザースキーマのシノニムを削除します。 | |
| パブリックシノニムを削除します。 | |
|
| ユーザー自身のスキーマにテーブルを作成します。 |
| 任意のユーザースキーマにテーブルを作成します。 | |
| 任意のユーザースキーマのテーブルまたはビューを変更します。 | |
| 任意のユーザースキーマのテーブルを削除または切り捨て ( | |
| 任意のユーザースキーマのテーブル、ビュー、およびマテリアライズドビューにコメントを追加します。 | |
| 任意のユーザースキーマのテーブル、ビュー、およびマテリアライズドビューをクエリします。 | |
| 任意のユーザースキーマのテーブルに行を挿入します。 | |
| 任意のユーザースキーマのテーブルの行を更新します。 | |
| 任意のユーザースキーマのテーブルから行を削除します。 | |
|
|
|
| 任意のユーザースキーマに DML トリガーまたはシステムトリガーを作成します。 | |
| データベースレベルのシステムトリガーを作成します。これには、 | |
|
| ユーザー自身のスキーマにタイプを作成します。 |
| 任意のユーザースキーマにタイプを作成します。 | |
|
| ユーザー自身のスキーマにビューを作成します。 |
| 任意のユーザースキーマにビューを作成します。 | |
| 任意のユーザースキーマのビューを削除します。 |