列暗号化ルールを設定した後、適切な権限管理はデータセキュリティを確保するための重要なプロセスです。このドキュメントでは、OceanBaseの列暗号化機能の権限体系と管理構文について詳しく説明し、完璧な権限制御メカニズムを構築して、機密データが許可されたユーザーにのみ表示されるようにする方法を紹介します。
前提条件
機密ルールを使用する前に、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権限を自動的に取得することはありません。 |
権限管理
権限付与の構文と例
ユーザーレベル権限の付与
構文は以下のとおりです:
-- ユーザー/ロールに機密ルールを作成する権限を付与します。この権限はユーザーレベルのみです。 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 のプレーンアクセス権限を付与します -- 複数のユーザー/ロールに対しても同時に権限を付与できます(ただし、一度に付与できるのは一つのルールに対する権限のみです) 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例:
tb1テーブルはtestデータベースにあります:-- 現在のテナント内のすべての sensitive rules を確認する 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_idrule_namePOLICYMETHODENABLEDPROTECT_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を参照してください。