列暗号化ルールを設定した後、適切な権限管理はデータセキュリティを確保するための重要なプロセスです。このドキュメントでは、OceanBaseの列暗号化機能の権限体系と管理構文について詳しく説明し、完璧な権限制御メカニズムを構築して、機密データが許可されたユーザーにのみ表示されるようにする方法を解説します。
前提条件
列暗号化ルールを作成する前に、キーマネージメントの設定とマスターキーの取得が必要です。
-- 透過的テーブル領域暗号化の方式をinternalまたはobcloudに設定します。
ALTER SYSTEM SET tde_method = '<encryption_method>';
-- Keystoreを作成します。
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE keystore_name IDENTIFIED BY oceanbase_password;
-- Keystoreを開きます。
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY oceanbase_password;
-- マスターキーを設定します。初回実行時は、マスターキーが有効になるまで20秒待機してください。
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY oceanbase_password;
tde_methodパラメータの詳細については、tde_methodを参照してください。
権限タイプ
列暗号化機能はルールベースの権限タイプを採用しており、データ保護ルールによってユーザーの機密列へのアクセス権限を制御します。OceanBaseはOracleの権限体系に新たに専用の権限タイプを追加し、列暗号化機能をサポートしています。これにはシステム権限と機密ルールレベルの権限が含まれます。
システム権限
権限名 |
説明 |
デフォルト所有者 |
アップグレード処理 |
権限制限 |
機能範囲 |
包含関係 |
|---|---|---|---|---|---|---|
| CREATE SENSITIVE RULE | ユーザーが機密ルールを作成および削除できるようにします。 | SYSユーザー。 | システムアップグレード時に自動付与されます。 | SYSユーザー権限はREVOKEできません。 |
CREATE/DROP SENSITIVE RULE構文を使用できます。 |
ALL PRIVILEGESに含まれます。 |
| PLAINACCESS | ユーザーがすべての平文データにアクセスできるようにします。データ保護ルールの影響を受けません。 | SYSユーザー。 | システムアップグレード時に自動付与されます。 | SYSユーザー権限はREVOKEできません。 |
すべての平文データにアクセスでき、いかなるデータ保護ルールの影響も受けません。 | ALL PRIVILEGESには含まれません。 |
ルールレベルの権限
権限名 |
説明 |
権限範囲 |
自動付与 |
|---|---|---|---|
| PLAINACCESS | ユーザーが特定のルールに関連付けられた列の平文データにアクセスできるようにします。 | 特定のルールに対するPLAINACCESS権限を持つユーザーは、そのルールに関連付けられた列の平文データにアクセスできます。 |
ルールを作成したユーザーは、そのルールのPLAINACCESS権限を自動的に持ちません。 |
権限管理
権限付与の構文と例
構文は以下のとおりです:
-- ユーザー/ロールに機密ルールを作成する権限を付与します。この権限はシステムレベルのみです。
GRANT CREATE SENSITIVE RULE TO <user_or_role_list>;
-- ユーザー/ロールにシステムレベルの平文アクセス権限を付与します。
GRANT PLAINACCESS ANY SENSITIVE RULE TO <user_or_role_list>;
パラメータの説明は以下のとおりです:
パラメータ |
説明 |
例 |
|---|---|---|
user_or_role_list |
ユーザーまたはロールのリスト。複数のユーザーはカンマで区切ります | u1, u2, r1 |
例:
-- ユーザーu1にシステムレベルの機密ルールを作成する権限を付与します。
GRANT CREATE SENSITIVE RULE TO u1;
-- 複数のユーザー/ロールに一度に権限を付与できます。
-- ユーザーu2とロールr1に機密ルールを作成する権限を付与します。
GRANT CREATE SENSITIVE RULE TO u2, r1;
構文は以下のとおりです:
-- ルールレベルでの権限付与。SENSITIVE RULEキーワードの使用が必要です。
GRANT PLAINACCESS ON SENSITIVE RULE <rule_name> TO <user_or_role_list>;
パラメータの説明は以下のとおりです:
パラメータ |
説明 |
例 |
|---|---|---|
rule_name |
機密ルールの名前 | 'salary_encryption', 'credit_card_rule' |
user_or_role_list |
ユーザーまたはロールのリスト。複数のユーザーはカンマで区切ります | u1, u2, r1 |
例:
-- u1にシステムレベルのプレーンアクセス権限を付与する(複数のユーザー/ロールに対しても同様に権限を付与できる)
GRANT PLAINACCESS ANY SENSITIVE RULE TO u1;
-- u1にルールr1に対するプレーンアクセス権限を付与する
-- 複数のユーザー/ロールに対しても同様に権限を付与できる(ただし、一度に付与できるのは一つのルール上の権限のみ)
GRANT PLAINACCESS ON SENSITIVE RULE r1 TO u1;
注意:より細かい粒度(テーブル、列レベル)でのPLAINACCESS権限の付与はサポートされていません。以下の形式の構文を使用するとエラーが発生します:
-- エラー例
GRANT PLAINACCESS ON <database>.<table> (<col_list>) TO <user_or_role_list>;
権限の取り消し構文と例
構文は以下のとおりです:
-- ユーザー/ロールが機密ルールを作成する権限を取り消す。この権限はシステムレベルのみ有効
REVOKE CREATE SENSITIVE RULE FROM <user_or_role_list>;
-- ユーザー/ロールのシステムレベルのプレーンアクセス権限を取り消す
REVOKE PLAINACCESS ANY SENSITIVE RULE FROM <user_or_role_list>;
パラメータの説明は以下のとおりです:
パラメータ |
説明 |
例 |
|---|---|---|
user_or_role_list |
ユーザーまたはロールのリスト。複数のユーザーはカンマで区切る | u1, u2, r1 |
例:
-- 権限の取り消し
REVOKE CREATE SENSITIVE RULE FROM u1;
-- 複数のユーザー/ロールに対して一度に権限を取り消すことができる
-- ユーザーu2とロールr1が機密ルールを作成する権限を取り消す
REVOKE CREATE SENSITIVE RULE FROM u2, r1;
構文は以下のとおりです:
-- ルールレベルでの権限剥奪。SENSITIVE RULE キーワードの使用に注意してください
REVOKE PLAINACCESS ON SENSITIVE RULE <rule_name> FROM <user_or_role_list>;
パラメータ説明:
パラメータ |
説明 |
例 |
|---|---|---|
rule_name |
機密ルールの名前 | 'salary_encryption', 'credit_card_rule' |
user_or_role_list |
ユーザーまたはロールのリスト。複数のユーザーはカンマで区切る | u1, u2, r1 |
例:
-- ユーザーu1のシステムレベルの平文アクセス権限を取り消す(同様に、複数のユーザー/ロールに対して一度に権限を取り消すことも可能)
REVOKE PLAINACCESS ANY SENSITIVE RULE FROM u1;
-- ユーザーu1のルールr1に対する平文アクセス権限を取り消す
-- 同様に、複数のユーザー/ロールに対して一度に権限を取り消すことも可能だが(ただし、一度に取り消せるのは一つのルール上の権限のみ)、
REVOKE PLAINACCESS ON SENSITIVE RULE r1 FROM u1;
注意:PLAINACCESS 権限のより細かい粒度(テーブル・列レベル)での権限剥奪はサポートされていません。以下の形式の構文を使用するとエラーが発生します:
-- エラー例
REVOKE PLAINACCESS ON <database>.<table> (<col_list>) FROM <user_or_role_list>;
権限の確認
現在のテナント配下のすべての機密データ保護ルール、または指定したテーブルや指定したユーザーに関連付けられたすべての機密ルールを確認することができます。LIKE 句を使用してルール名をフィルタリングできます。
構文は以下のとおりです:
SHOW SENSITIVE RULES opt_show_condition
| SHOW SENSITIVE RULES from_or_in relation_factor from_or_in USER user_factor opt_show_condition
| SHOW SENSITIVE RULES from_or_in USER user_factor opt_show_condition;
パラメータ説明:
パラメータ |
説明 |
例 |
|---|---|---|
opt_show_condition |
オプションの表示条件。例:LIKE句 |
LIKE '%rule1%' |
from_or_in |
オプションのFROM句またはIN句 | FROMまたはIN |
relation_factor |
テーブル名 | tb1, employees |
user_factor |
ユーザー名 | u1, u2 |
例:
-- 現在のテナント配下のすべてのsensitive rulesを確認する
SHOW SENSITIVE RULES;
-- tb1に関連付けられたすべてのデータ保護ルールを確認する
SHOW SENSITIVE RULES FROM tb1;
-- u1.tb1に関連付けられたすべてのデータ保護ルールを確認する
SHOW SENSITIVE RULES FROM tb1 FROM u1;
-- u1ユーザーに関連付けられたすべてのデータ保護ルールを確認する
SHOW SENSITIVE RULES FROM USER u1;
-- LIKE句を使用してルール名をフィルタリングする
SHOW SENSITIVE RULES LIKE '%rule1%';
SHOW SENSITIVE RULES FROM tb1 LIKE '%rule1%';
SHOW SENSITIVE RULES FROM tb1 FROM u1 LIKE '%rule1%';
SHOW SENSITIVE RULES FROM USER u1 LIKE '%rule1%';
実行結果の例:
列名 |
rule_id |
rule_name |
POLICY |
METHOD |
ENABLED |
PROTECT_COLS |
|---|---|---|---|---|---|---|
| 例 | 1 | 'ENCRYPT_COL' | 'ENCRYPTION' | 'AES-256-ECB' | 'YES' | 'user1.tbl1(col_1, col_2), user2.tbl2(col_3), user3.tbl4(col_4, col_5)' |
実行結果の各フィールドについて説明します。
フィールド名 |
説明 |
値例 |
|---|---|---|
rule_id |
ルールID。システムが自動生成します | 1, 2 |
rule_name |
ルール名 | 'ENCRYPT_COL' |
POLICY |
ポリシーの種類 | 'ENCRYPTION' |
METHOD |
暗号化方式 | 'AES-256-ECB' |
ENABLED |
有効かどうか | 'YES', 'NO' |
PROTECT_COLS |
保護される列。形式はuser.table(columns) |
'user1.tbl1(col_1, col_2)'。異なるテーブル間はカンマで区切ります。 |
Oracleモードでは、SHOW GRANTSステートメントを使用して関連する権限情報を確認することはできません。以下のビューを使用して確認する必要があります。
ビュー名 |
説明 |
|---|---|
| DBA_OB_SENSITIVE_RULE_PLAINACCESS_USERS | 暗号化されていないアクセス権限を持つすべてのユーザーを確認します。 |
ALL_OBJECTS、DBA_OBJECTS、USER_OBJECTS |
敏感なルールの保護対象を確認できます。 |
DBA_TAB_PRIVS、DBA_SYS_PRIVS、ALL_TAB_PRIVS、USER_TAB_PRIVS、ROLE_TAB_PRIVS |
付与されたルールレベルの暗号化されていないアクセス(PLAINACCESS)権限を確認できます。 |
USER_SYS_PRIVS、ROLE_SYS_PRIVS |
付与されたシステムレベルの敏感なルール作成(CREATE SENSITIVE RULE)権限と暗号化されていないアクセス(PLAINACCESS)権限を確認できます。 |