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

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

最終更新日:Sep 10, 2024

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

シナリオと要件

異なる州の顧客を含むcustomerという名前のテーブルが作成されます。 サンプル文:

Create Table `customer` (
 `id` bigint AUTO_INCREMENT,
 `province_id` bigint NOT NULL,
 `user_info` varchar,
 primary key (`id`)
) DISTRIBUTE BY HASH(`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 | Tom       |
| 1369417242424811520 |           1 | Jerry     |
| 1369417242424811522 |           3 | Mark      |
| 1369417242424811521 |           2 | Jerry     |
+---------------------+-------------+-----------+

要件は、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 | Tom       |
    | 1369417242424811520 |           1 | Jerry     |
    +---------------------+-------------+-----------+

    user1アカウントを使用してv2ビューのデータを照会すると、次のエラーメッセージが表示されます。

    ERROR 1815 (HY000): [9001, 2021083114191719216818804803453965343] : Access Denied
  • user2アカウントを使用してAnalyticDB for MySQLクラスターのadb_demoデータベースに接続する場合、user2アカウントはv2ビューのデータのみを照会できます。 サンプルステートメント:

    SELECT * FROM v2;

    上記のステートメントを実行すると、次のデータが返されます。

    +---------------------+-------------+-----------+
    | ID                  | PROVINCE_ID | USER_INFO |
    +---------------------+-------------+-----------+
    | 1369417242424811521 |           2 | Jerry     |
    +---------------------+-------------+-----------+

    user2アカウントを使用してv1ビューのデータを照会すると、次のエラーメッセージが表示されます。

    ERROR 1815 (HY000): [9001, 2021083114191719216818804803453965343] : Access Denied