列暗号化ルールを設定した後、適切な権限管理はデータセキュリティを確保するための重要なプロセスです。このドキュメントでは、OceanBaseの列暗号化機能の権限体系と管理構文について詳しく説明し、完璧な権限制御メカニズムを構築して、機密データが許可されたユーザーにのみ表示されるようにする方法を解説します。
前提条件
機密ルールを使用する前に、TDE機能を有効にし、マスターキーを作成する必要があります。
-- 透過的テーブル領域暗号化の方式をinternalまたはobcloudに設定します。
ALTER SYSTEM SET tde_method = '<encryption_method>';
ALTER INSTANCE ROTATE INNODB MASTER KEY; -- 初回実行時は、キーが有効になるまで約20秒待機する必要があります。
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)権限を確認できます。 |