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

AnalyticDB for MySQL:ビューを使用した権限管理

最終更新日:Jun 12, 2024

このトピックでは、異なるアカウントに対応する権限を付与して、同じテーブル内の異なるデータをクエリする方法について説明します。

シナリオと要件

異なる州の顧客を含む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) のデータを照会する権限を付与することです。

実装方法

上記の要件を満たすには、次の手順を実行します。
  1. 次のステートメントを実行して、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」をご参照ください。
  2. ビューの作成後、次のステートメントを実行して、対応する権限をアカウントに付与します。
    説明 アカウントの作成方法については、「ユーザーの作成」をご参照ください。
    • 次のステートメントを実行して、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] : アクセス拒否