列暗号化ルールを設定した後、適切な権限管理はデータセキュリティを確保するための重要な要素です。本記事では、OceanBaseの列暗号化機能における権限体系と管理構文について詳しく説明し、権限管理メカニズムを確立して、機密データが許可されたユーザーにのみ可視されるようにする方法を解説します。
注意
この機能はMySQLテナントモードにのみ適用されます。
準備作業
機密ルールを使用する前に、TDE暗号化機能を有効にし、マスターキーを作成する必要があります。
-- 透過的テーブル領域の暗号化方式をinternalまたはobcloudに設定
ALTER SYSTEM SET tde_method = '<encryption_method>';
ALTER INSTANCE ROTATE INNODB MASTER KEY; -- 初回実行時は約20秒待機してキーを有効化する必要があります
tde_methodパラメータの詳細については、tde_methodを参照してください。
権限タイプ
列暗号化機能はルールに基づく権限タイプを採用しており、データ保護ルールによってユーザーの機密列へのアクセス権限を制御します。OceanBaseはMySQLの権限体系に、列暗号化機能をサポートするための専用の権限タイプを追加しました。これにはユーザーレベルの権限と機密ルールレベルの権限が含まれます。
ユーザーレベルの権限
| 権限名 | 説明 | デフォルト所有者 | アップグレード時の処理 | 権限制限 | 機能範囲 | 包含関係 |
|---|---|---|---|---|---|---|
| CREATE SENSITIVE RULE | ユーザーが機密ルールを作成および削除できるようにします。 | rootユーザー。 | システムアップグレード時に自動付与されます。 | rootユーザー権限はREVOKEで取り消すことができません。 |
CREATE/DROP SENSITIVE RULE構文を使用できます。 |
ALL PRIVILEGESに含まれています。 |
| PLAINACCESS | ユーザーがデータ保護ルールの影響を受けず、すべての平文データにアクセスできるようにします。 | rootユーザー。 | システムアップグレード時に自動付与されます。 | rootユーザー権限はREVOKEで取り消すことができません。 |
すべての平文データにアクセスでき、いかなるデータ保護ルールの影響も受けません。 | ALL PRIVILEGESには含まれていません。 |
機密ルールレベルの権限
| 権限名 | 説明 | 権限範囲 | 自動付与 | 重要な説明 |
|---|---|---|---|---|
| PLAINACCESS | ユーザーが特定のルールに関連付けられた列の平文データにアクセスできるようにします。 | 特定のルールに対するPLAINACCESS権限を持つユーザーは、そのルールに関連付けられた列の平文データにアクセスできます。 |
ルールを作成したユーザーは、そのルールに対するPLAINACCESS権限(WITH GRANT OPTIONを除く)を自動的に取得します。 |
ルールの作成者は、WITH GRANT OPTION権限を持たない限り、そのルールを他のユーザーに直接GRANT PLAINACCESS ONすることはできません。 |
権限管理
権限付与の構文と例
ユーザー権限の付与
構文は以下のとおりです:
-- ユーザーまたはロールにセンシティブルールを作成する権限を付与します。この権限はユーザーレベルにのみ存在します。 GRANT CREATE SENSITIVE RULE ON *.* TO <user_or_role_list>; -- ユーザーまたはロールに特定のルールに対するプレーンアクセス権限を付与します。 GRANT PLAINACCESS ON *.* TO <user_or_role_list>;パラメータの説明は以下のとおりです:
パラメータ 説明 例 user_or_role_listユーザーまたはロールのリスト。複数のユーザーを指定する場合は、カンマで区切ります。 u1, u2, r1*.*すべてのデータベースのすべてのテーブルを表します。 固定値であり、変更できません。 例:
-- ユーザーu1にセンシティブルールを作成する権限を付与します。 GRANT CREATE SENSITIVE RULE ON *.* TO u1; -- 複数のユーザーまたはロールに一度に権限を付与できます。 -- ユーザーu2とロールr1にセンシティブルールを作成する権限を付与します。 GRANT CREATE SENSITIVE RULE ON *.* 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 ON *.* TO u1; REVOKE PLAINACCESS ON *.* FROM u1; -- ユーザーu1にルールr1に対するプレーンアクセス権限を付与します。 -- 同様に、複数のユーザーまたはロールに一度に権限を付与できます(ただし、一度に付与できるのは1つのルールの権限のみ)。 GRANT PLAINACCESS ON SENSITIVE RULE r1 TO u1;
権限の取り消し構文と例
ユーザー権限の取り消し
構文は以下のとおりです:
-- ユーザーまたはロールが機密ルールを作成する権限を取り消す。この権限はユーザーレベルにのみ存在する。 REVOKE CREATE SENSITIVE RULE ON *.* FROM <user_or_role_list>; -- ユーザーまたはロールが特定のルールに対する平文アクセス権限を取り消す REVOKE PLAINACCESS ON *.* FROM <user_or_role_list>;パラメータの説明は以下のとおりです:
パラメータ 説明 例 user_or_role_listユーザーまたはロールのリスト。複数のユーザーを指定する場合は、カンマで区切ります u1, u2, r1*.*すべてのデータベースのすべてのテーブルを表します 固定値であり、変更できません 例:
-- 権限の取り消し REVOKE CREATE SENSITIVE RULE ON *.* FROM u1; -- 複数のユーザーまたはロールに対して一度に権限を取り消すことができる -- ユーザーu2とロールr1が機密ルールを作成する権限を取り消す REVOKE CREATE SENSITIVE RULE ON *.* 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 ON *.* FROM u1; -- ユーザーu1がルールr1に対する平文アクセス権限を取り消す -- 同様に複数のユーザーまたはロールに対して同時に権限を取り消すことも可能だが、一度に取り消せるのは一つのルール上の権限のみ REVOKE PLAINACCESS ON SENSITIVE RULE r1 FROM u1;
権限の確認
感染ルールの確認
現在のテナント内のすべての機密データ保護ルール、または指定されたテーブルやデータベースに関連付けられたすべての感染ルールを確認できます。ルール名のフィルタリングには
LIKE句を使用できます。構文は以下のとおりです:
SHOW SENSITIVE RULES opt_show_condition | SHOW SENSITIVE RULES from_or_in relation_factor opt_from_or_in_database_clause opt_show_condition | SHOW SENSITIVE RULES from_or_in DATABASE from_or_in database_factor opt_show_condition;パラメータの説明:
パラメータ 説明 例 opt_show_conditionオプションの表示条件。例えば、 LIKE句などLIKE '%rule1%'relation_factorテーブル名 tb1,employeesdatabase_factorデータベース名 test,hr_db例:
-- 現在のテナント内のすべてのsensitiveルールを確認する SHOW SENSITIVE RULES; -- tb1に関連付けられたすべてのデータ保護ルールを確認する SHOW SENSITIVE RULES FROM tb1; -- test.tb1に関連付けられたすべてのデータ保護ルールを確認する SHOW SENSITIVE RULES FROM tb1 FROM test; -- test DBに関連付けられたすべてのデータ保護ルールを確認する SHOW SENSITIVE RULES FROM DATABASE test; -- LIKE句を使用してルール名をフィルタリングする SHOW SENSITIVE RULES LIKE '%rule1%'; SHOW SENSITIVE RULES FROM tb1 LIKE '%rule1%'; SHOW SENSITIVE RULES FROM tb1 FROM test LIKE '%rule1%'; SHOW SENSITIVE RULES FROM DATABASE test LIKE '%rule1%';実行結果の例:
列名 rule_id rule_name POLICY METHOD ENABLED PROTECT_COLS 例 1 'ENCRYPT_COL' 'ENCRYPTION' 'AES-256-ECB' 'YES' 'db1.tbl1(col_1, col_2), db2.tbl2(col_3), db3.tbl4(col_4, col_5)' 実行結果フィールドの説明:
フィールド名 説明 サンプル値 rule_idルールID。システムが自動生成します。 1,2rule_nameルール名 'ENCRYPT_COL'POLICYポリシーのタイプ 'ENCRYPTION'METHOD暗号化方式 'AES-256-ECB'ENABLED有効かどうか 'YES','NO'PROTECT_COLS保護される列。書式は database.table(columns)です。'db1.tbl1(col_1, col_2)'。異なるテーブル間はカンマで区切ります。ユーザー権限の確認
構文は以下のとおりです:
-- 指定されたユーザーのすべての権限を確認する SHOW GRANTS FOR <user_or_role_list>; -- 現在のユーザーの権限を確認する SHOW GRANTS;例:
-- ユーザーu1のすべての権限を確認する SHOW GRANTS FOR u1;実行結果の例:
+-----------------------------------------------------------+ | Grants for u1@% | +-----------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO u1 WITH GRANT OPTION | | GRANT CREATE SENSITIVE RULE ON *.* TO u1; | | GRANT PLAINACCESS ON *.* TO u1; | | GRANT PLAINACCESS ON `enc_rule1` TO u1; | | GRANT PLAINACCESS ON `enc_rule2` TO u1; | +-----------------------------------------------------------+
関連ドキュメント
- 列暗号化機能の概要
- 列暗号化ルールの作成
- 機密レベルルールの定義とプロパティについては、DBA/CDB_OB_SENSITIVE_RULESを参照してください。