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"}');