列暗号化ルールを設定した後、適切な権限管理はデータセキュリティを確保するための重要なプロセスです。このドキュメントでは、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に対する平文アクセス権限を付与します。 -- 同様に、複数のユーザー/ロールに一度に権限を付与できます(ただし、一度に付与できるのは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例:
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を参照してください。