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

ApsaraDB RDS:SQL文を使用した列暗号化ルールの構成

最終更新日:Oct 08, 2024

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

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

前提条件

  • RDSインスタンスは、MySQL 5.7と20231031以降のマイナーエンジンバージョンを実行します。 RDSインスタンスは、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: 不正ユーザーの権限を取り消します。

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

    例3: appuserユーザーとtest_userユーザーに、限られたリソースにアクセスする権限を付与し、不正ユーザーの権限を取り消します。

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

    このセクションに記載されているユーザーは、RDSインスタンスに存在する必要があります。

    ユーザーに一時使用のフルアクセス権限を付与

    使いやすさのために、常時機密データベース機能を使用すると、ユーザーにfullAccess権限を付与して、効率的な方法で平文データを一時的に維持することができます。 ユーザーに権限を付与すると、ユーザーはRDSインスタンスの平文データベースデータにアクセスできます。

    • この場合、設定されたデータ保護ルールはユーザーには適用されず、ユーザーはRDSインスタンスで直接平文データベースデータを照会できます。

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

    • expiredパラメーターの値は、1970-01-02 00:00 ~ 2038-01-18 03:14:07の範囲にある必要があります。

    例: dbaユーザーに一時的に使用するためのフルアクセス権限を付与する

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