すべてのプロダクト
Search
ドキュメントセンター

:SQL による列暗号化ルールの設定

最終更新日:May 01, 2026

ApsaraDB RDS for MySQL インスタンスで常時機密データベース機能を使用する前に、データ保護ルールを設定する必要があります。ApsaraDB RDS for MySQL では、設定ファイルを使用してデータ保護ルールを管理できます。本トピックでは、SQL ステートメントを使用してデータ保護ルールを設定する方法と、関連する API オペレーションの使用方法について説明します。

常時機密データベース機能は、設定されたデータ保護ルールを RDS インスタンスのシステムテーブルに格納します。RDS インスタンスのシステムテーブルへの書き込みは、特権アカウントまたは許可されるユーザーのみが行えます。該当のシステムテーブルは、mysql.encdb_sensitive_rules テーブルおよび mysql.encdb_auth_users テーブルです。

前提条件

  • RDS for MySQL インスタンスは、MySQL 5.7(マイナーエンジンバージョン 20231031 以降)または MySQL 8.0(マイナーエンジンバージョン 20240430 以降)を実行している必要があります。詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

  • 常時機密データベース機能が有効になっている必要があります。詳細については、「常時機密データベース機能の使用」をご参照ください。

  • データ保護ルールの設定には、特権アカウントを使用する必要があります。

注意事項

  • データ保護ルールを設定して有効化すると、そのルールは RDS インスタンス上のすべてのデータベースに適用され、再度設定する必要はありません。

  • データ保護ルールの管理とオンラインアプリケーションの運用には、それぞれ専用のデータベースアカウントを使用することを推奨します。必要がない限り、オンラインアプリケーションに対して管理権限を付与しないでください。

  • mysql.encdb_sensitive_rules テーブルおよび mysql.encdb_auth_users テーブルに対する読み取り・書き込み権限の付与には十分ご注意ください。これらのテーブルが改変されると、攻撃者が常時機密保護をバイパスできる可能性があります。

SQL UDF での操作

  • ADD:ルールの追加

    SELECT encdb_rule_op('add',<rule object json string> or <rules list json string>);

    例 1:newrule という名前のルールを追加します。

    SELECT encdb_rule_op('add','{"name":"newrule","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}}');

    例 2:newrule1 および newrule2 という名前のルールを追加します。

    SELECT encdb_rule_op('add','[{"name":"newrule1","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}},{"name":"newrule2","enabled":true,"meta":{"databases":["test2"],"tables":["test2"],"columns":["a","b"]}}]');
  • UPDATE:ルールの更新

    SELECT encdb_rule_op('update',<rule object json string> or <rules list json string>);

    例 1:newrule という名前のルールを更新します。

    SELECT encdb_rule_op('update','{"name":"newrule","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}}');

    例 2:newrule1 および newrule2 という名前のルールを更新します。

    SELECT encdb_rule_op('update','[{"name":"newrule1","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}},{"name":"newrule2","enabled":true,"meta":{"databases":["test2"],"tables":["test2"],"columns":["a","b"]}}]');
    説明

    name で指定されたルールがすでに存在する場合は更新されます。存在しない場合は、name に対応する新しいルールが追加されます。この場合、update 操作は add 操作と同一になります。

  • DELETE:ルールの削除

    SELECT encdb_rule_op('delete',<rule name json string> or <rule name list json string>);

    例 1:delrule という名前のルールを削除します。

    SELECT encdb_rule_op('delete','"delrule"');

    例 2: delrule1 および delrule1 という名前のルールを削除します。

    SELECT encdb_rule_op('delete','["delrule1","delrule2"]');
    説明

    params パラメーターの値は JSON フォーマットである必要があります。そのため、単一のルールを削除する際は、xxx 形式ではなく、"xxx" 形式でルール名を指定する必要があります。たとえば、'delrule' ではなく、'"delrule"' と指定します。

  • GRANT:権限の付与または取り消し

    説明

    ユーザーに必要な権限を付与する必要があります。

    権限の付与または取り消し

    SELECT encdb_rule_op('grant',<users object json string>);

    例 1:appuser および test_user ユーザーに制限付きリソースへのアクセス権限を付与します。

    SELECT encdb_rule_op('grant','{"restrictedAccess": ["appuser","test_user"]}'); 

    例 2:illegal ユーザーの権限を取り消します。

    SELECT encdb_rule_op('grant','{"noneAccess": ["illegal"]}'); 

    例 3:appuser および test_user ユーザーに制限付きリソースへのアクセス権限を付与し、illegal ユーザーの権限を取り消します。

    SELECT encdb_rule_op('grant','{"restrictedAccess": ["appuser","test_user"], "noneAccess": ["illegal"]}'); 
    説明

    本セクションで言及されているユーザーは、RDS インスタンス内に存在している必要があります。

    fullAccess 権限の一時的な付与

    利便性およびプレーンテキストデータのメンテナンスを一時的に行うために、常時機密データベース機能ではユーザーに fullAccess 権限を付与できます。この権限を持つユーザーは、プレーンテキストでデータベースにアクセスできます。

    • この場合、設定されたデータ保護ルールは該当ユーザーには適用されず、ユーザーは RDS インスタンス内のデータベースデータを直接プレーンテキストでクエリできます。

    • セキュリティ上、必要な場合にのみ短期間で権限を付与することを推奨します。fullAccess 権限を付与する前に、ビジネス要件を十分に理解し、関連するリスクについて責任を負う必要があります。

    • expired パラメーターの値は、MySQL がサポートする範囲内である必要があります。サポート範囲は 1970-01-02 00:00:01 から 2038-01-18 03:14:07 までです。

    例:dba ユーザーに full access 権限を一時的に付与します。

    SELECT encdb_rule_op('grant','{"fullAccess": ["dba"], "expired": "2023-08-21 14:21:30"}');