このトピックでは、異なるアカウントに対応する権限を付与して、同じテーブル内の異なるデータをクエリする方法について説明します。
シナリオと要件
異なる州の顧客を含む
customer
という名前のテーブルが作成されます。 サンプル文: テーブル 'customer' の作成 ()
'id' bigint AUTO_INCREMENT、
'provines_id' bigint NOT NULL、
'user_info' varchar、
主キー ('id')
) ハッシュによる分配 ('id');
テストデータが
顧客
テーブルに挿入されます。 サンプルステートメント: INSERT INTO customer(province_id,user_info) VALUES (1,'Tom '),(1,'Jerry'),(2,'Jerry'),(3,'Mark');
SELECTステートメントを実行して顧客テーブルのデータを照会すると、次のデータが返されます。
+ --------------------- + ------------------- +
| id | province_id | user_info |
+ --------------------- ------------ -------------- +
| 1369417242420617216 | 1 | トム |
| 1369417242424811520 | 1 | ジェリー |
| 1369417242424811522 | 3 | マーク |
| 1369417242424811521 | 2 | ジェリー |
+ --------------------- ------------ -------------- +
要件は、user1
アカウントにProvince 1 (Province e_id=1
) のデータを照会する権限を付与し、user2
アカウントにProvince 2 (Province e_id=2
) のデータを照会する権限を付与することです。
実装方法
上記の要件を満たすには、次の手順を実行します。
- 次のステートメントを実行して、Province 1の
v1
という名前のビューとProvince 2のv2
という名前のビューを作成します。- 次のステートメントを実行して、省1のデータをクエリするv1ビューを作成します。
create SQL SECURITY DEFINER view v1 AS SELECT * FROM customer WHERE province_id=1;
- 次のステートメントを実行して、省2のデータを照会するv2ビューを作成します。
create SQL SECURITY DEFINER view v2 AS SELECT * FROM customer WHERE province_id=2;
説明 ビュー作成ステートメントで使用されるパラメーターの詳細については、「CREATE view」をご参照ください。 - 次のステートメントを実行して、省1のデータをクエリするv1ビューを作成します。
- ビューの作成後、次のステートメントを実行して、対応する権限をアカウントに付与します。説明 アカウントの作成方法については、「ユーザーの作成」をご参照ください。
- 次のステートメントを実行して、
user1
アカウントに、v1
ビューを使用してProvince 1のデータを照会する権限を付与します。grant SELECT ON v1 to user1;
- 次のステートメントを実行して、
user2
アカウントに、v2
ビューを使用してProvince 2のデータを照会する権限を付与します。grant SELECT ON v2 to user2;
- 次のステートメントを実行して、
結果の検証
user1
アカウントを使用してAnalyticDB for MySQLクラスターのadb_demo
データベースに接続する場合、user1
アカウントはv1
ビューのデータのみを照会できます。 サンプルステートメント:
上記のステートメントを実行すると、次のデータが返されます。SELECT * FROM v1;
+ --------------------- + ----------------- + | ID | PROVINCE_ID | USER_INFO | + --------------------- ------------ -------------- + | 1369417242420617216 | 1 | トム | | 1369417242424811520 | 1 | ジェリー | + --------------------- ------------ -------------- +
user1
アカウントを使用してv2
ビューのデータを照会すると、次のエラーメッセージが表示されます。エラー1815 (HY000): [9001, 2021083114191719216818804803453965343] : アクセス拒否
user2
アカウントを使用してAnalyticDB for MySQLクラスターのadb_demo
データベースに接続する場合、user2
アカウントはv2
ビューのデータのみを照会できます。 サンプルステートメント:
上記のステートメントを実行すると、次のデータが返されます。SELECT * FROM v2;
+ --------------------- + ----------------- + | ID | PROVINCE_ID | USER_INFO | + --------------------- ------------ -------------- + | 1369417242424811521 | 2 | ジェリー | + --------------------- ------------ -------------- +
user2
アカウントを使用してv1
ビューのデータを照会すると、次のエラーメッセージが表示されます。エラー1815 (HY000): [9001, 2021083114191719216818804803453965343] : アクセス拒否