Data Management (DMS) は、接続されているすべての NoSQL 以外のデータベースに対して行レベルのアクセス制御を提供します。この機能は、ユーザーがアクセスできるデータ行を制御します。たとえば、営業マネージャーが担当リージョンのデータのみを閲覧できるように制限できます。
前提条件
インスタンスはセキュリティ連携制御モードである必要があります。詳細については、「制御モードを表示する」をご参照ください。
背景情報
データを保護する方法は、大きく分けて垂直方向と水平方向の 2 つがあります。
-
垂直方向のデータ保護:フィールドレベルのデータ保護によって実装されます。
機密レベルに基づいてフィールドを分類することで、機密データに完全マスキングまたは部分マスキングを適用できます。詳細については、「機密データの管理」をご参照ください。
たとえば、統計分析を担当する従業員は、注文テーブル内の顧客メールアドレスを閲覧できません。

-
水平方向のデータ保護:行レベルのアクセス制御によって実装されます。
1 つ以上の特定の値 (コントロール値) に基づいて行をフィルタリングすることで、行レベルのデータへのアクセスを制御できます。
たとえば、複数拠点を持つ企業の従業員は、全拠点の注文データではなく、担当店舗の注文データのみを閲覧できます。

制限事項
-
この機能は、MySQL や PolarDB などのリレーショナルデータベースでのみ使用できます。
-
この機能は、セキュリティコラボレーションコントロールモードのインスタンスでのみ使用できます。
-
この機能は物理データベースのみをサポートしており、論理データベースはサポートしていません。
-
全行権限を持たないユーザーについては、行レベルのアクセス制御が設定されたテーブル内のデータをクエリ、変更、または削除する際、フィルター条件に次の制限があります:
-
コントロールフィールドのフィルター値を指定する必要があります。また、これらの値はコントロール値のリスト内である必要があります。
-
フィルター条件が制限されます。例:
-
WHERE 句では
=演算子とin演算子のみがサポートされています。 -
OR、XOR、NOT などの論理演算はサポートされていません。
-
-
基本概念
-
コントロールテーブル、コントロールフィールド、コントロール値
-
コントロールテーブル:行レベルのアクセス制御を設定するテーブルです。
-
コントロールフィールド:行レベルのアクセス制御を適用するために、コントロールテーブルで使用するフィールドです。
-
コントロール値:コントロールフィールドの値です。
-
-
行レベルの権限:コントロールフィールドの値に基づいて、行レベルのデータへのアクセスを制御する権限です。
-
単一値の行権限:1 つ以上の特定のコントロール値に基づいてアクセスを制御する権限です。
-
全行権限:コントロールテーブル内のすべての行へのアクセスを付与する権限です。
-
-
コントロールグループ:同一のコントロール値セットを共有する複数のコントロールフィールドを管理するためのグループです。
たとえば、テーブル A とテーブル B で同じコントロール値に基づく行レベルのアクセス制御が必要な場合、1 つのコントロールグループで両方のテーブルを管理できます。
行レベルのアクセス制御の設定
管理者、DBA、またはセキュリティ管理者のみがこのタスクを実行できます。ユーザーロールの詳細については、「システムロールを表示する」をご参照ください。
DMSコンソールV5.0 にログインします。
左上隅にある
アイコンにポインターを移動し、 を選択します。説明DMS コンソールを通常モードで使用している場合は、上部のナビゲーションバーで を選択します。
-
ページの右上隅で、[グローバル機密データ] をクリックして機密データの一覧ページを開きます。
-
ロー · レベル制御 タブをクリックします。
-
追加制御グループ をクリックして、コントロールグループに名前を付けます。
-
行設定を追加し、[追加] をクリックします。
-
行設定の追加 をクリックします。
-
対象データベースを検索して選択します。
-
対象テーブルとコントロールフィールドを選択します。
-
任意: 行設定の追加 をクリックして、同じ制御値を使用する複数の制御テーブルを追加します。
行レベルのアクセス制御を設定すると、必要な権限が付与されるまで SQL コンソールから対象テーブルのデータを閲覧できません。必要な行フィルターを指定せずにクエリを実行すると、DMS がリクエストをインターセプトしてエラーを返します。例:
SELECT * FROMtestRLS Access Denied: [test]: You do not have permission for all rows in this table. The WHERE clause must include a filter condition [1] on the control field: name TraceId: 0a032a1516728214824878812ed7f0SELECT * FROM `test` WHERE `name` = 'Xiaohong'; RLS Access Denied: [test]: Access to a table with row-level access control is involved. You do not have permission to access the row: name = Xiaohong. The control value 'Xiaohong' does not exist. To access this value, contact an administrator, DBA, or security administrator to add the value and then apply for the corresponding row-level permissions before retrying. TraceId: 0a032a1d16728216329266611e4b0d -
-
任意:特定の行値に対する権限を付与するには、先にそれらの値を定義する必要があります。
-
対象のコントロールグループの「操作」列で、[詳細] をクリックします。
-
制御値詳細 パネルで、追加行値 をクリックします。
-
輸入行値 ダイアログボックスで、既存の行の値を追加するか、置換するかを選択します。
-
[Yes] :新しい行値を既存の行値に追加します。
-
[No] :既存の行値をすべて新しい行値に置き換えます。
-
-
行値の内容を入力します。
説明1 つの行値に複数のコントロール値を追加できます。コントロール値はカンマ (,) で区切ります。申請が承認されると、その行値に含まれるすべてのコントロール値をクエリできる権限が付与されます。
たとえば、従業員が北京と上海の顧客データのみを閲覧できるようにする場合、行値の内容として
Beijing, Shanghaiを入力できます。この行値に対する従業員の権限申請が承認されると、従業員は北京と上海の両方のリージョンの顧客データを閲覧できるようになります。
-
行レベルの権限の申請
DMSコンソールV5.0 にログインします。
左上隅にある
アイコンにポインターを移動し、 を選択します。説明DMS コンソールを通常モードで使用している場合は、上部のナビゲーションバーで を選択します。
-
ページの右上隅で、 をクリックします。
-
データベース名を入力します。
説明あいまい検索にはパーセント記号 (%) を使用できます。
-
行レベルの権限のスコープを選択します。
-
[Single] :個々の行値に対する権限を申請します。
説明-
行値には複数のコントロール値を含めることができます。行値に対する権限を持っている場合、その行値に含まれるすべてのコントロール値に対応するデータをクエリ、エクスポート、または変更できます。
-
1 つのコントロール値は複数の行に対応する場合があります。コントロール値に対する権限を持っている場合、その値に対応するすべてのデータ行をクエリ、エクスポート、または変更できます。
-
-
[All] :コントロールテーブル内のすべての行へのアクセス権限を申請します。
-
-
[検索] をクリックします。
-
対象の行レベルの権限を選択し、
アイコンをクリックします。説明行値列にあるハイフン (
-) は、すべての行に対する権限を示します。 -
[権限タイプ]、[有効期間] を選択し、申請の [理由] を入力します。
-
[送信] をクリックします。
チケットが承認されると、SQL コンソールでデータをクエリ、エクスポート、または変更できます。たとえば、SQL コンソールで
SELECT * FROMを実行すると、order1 テーブル内の region が Beijing である 2 件のレコードのみ (Zhangsan と Xiaoming) が返されます。これにより、行レベルのアクセス制御が正しく機能していることを確認できます。order1WHERE region = 'Beijing';説明行レベルの権限を解放するには:
-
自身の権限を解放するには:「自身の権限の表示」セクションに移動して、権限を表示および解放します。詳細については、「自身の権限の表示」をご参照ください。
-
管理者が権限を解除するには、 ページで対象のユーザーを見つけ、[操作] 列で を選択してユーザーの権限を表示および解除します。
-