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

ApsaraDB RDS:テーブル、ビュー、およびフィールドを管理するためのアカウントの承認

最終更新日:Mar 21, 2025

デフォルトでは、ApsaraDB RDS コンソールで作成されたアカウントに、データベース内のすべてのデータに対する権限を付与できます。 ApsaraDB RDS for MySQL インスタンスのデータベース内の特定のテーブル、ビュー、またはフィールドに対する権限を付与する場合、必要な SQL 文を実行して詳細な権限付与を実行できます。

前提条件

特権アカウントが作成されていること。 詳細については、「アカウントを作成する」をご参照ください。

手順

  1. 特権アカウントを使用して、クライアントまたは CLI を使用して RDS インスタンスに接続する

  2. SQL 文を実行してアカウントを作成し、データベース内のテーブル、ビュー、およびフィールドを管理する権限をアカウントに付与します。

    説明

    作成されたアカウントには、ApsaraDB RDS コンソールで承認されたデータベースを表示する権限がありません。

    1. アカウントを作成します。

      CREATE USER `<Username of the account>`@`%` IDENTIFIED BY '<Password of the account>';
    2. PROCESS やレプリケーション関連の権限など、グローバル権限をアカウントに付与します。

      GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<Username of the account>'@'%';
    3. 特定のデータベース内のテーブルに対するすべての権限をアカウントに付与します。

      GRANT ALL PRIVILEGES ON `<Database name>`.`<Table name>` TO '<Username of the account>'@'%';
    4. mysql システムデータベース内の一般的に使用されるテーブルに対する読み取り専用権限をアカウントに付与します。

      GRANT SELECT ON `mysql`.`help_topic` TO '<Username of the account>'@'%';
      GRANT SELECT ON `mysql`.`func` TO '<Username of the account>'@'%';
      GRANT SELECT ON `mysql`.`time_zone` TO '<Username of the account>'@'%';
      GRANT SELECT ON `mysql`.`slow_log` TO '<Username of the account>'@'%';
      GRANT SELECT ON `mysql`.`proc` TO '<Username of the account>'@'%';
      GRANT SELECT ON `mysql`.`general_log` TO '<Username of the account>'@'%';
      -- ビジネス要件に基づいて、他のシステムテーブルに対する権限を付与します。

      • テーブルを管理する権限をアカウントに付与する: test01 という名前のアカウントを作成し、rds001 データベース内の test100 テーブルを管理する権限をアカウントに付与します。

        CREATE USER `test01`@`%`IDENTIFIED BY 'passwd';
        GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test01'@'%';
        GRANT ALL PRIVILEGES ON `rds001`.`test100`  TO 'test01'@'%';
        GRANT SELECT ON `mysql`.`help_topic` TO 'test01'@'%';
        GRANT SELECT ON `mysql`.`func` TO 'test01'@'%';
        説明

        test100 をアスタリスク (*) に置き換えると、アカウントは rds001 データベース内のすべてのテーブルに対する権限を持ち、ApsaraDB RDS コンソールでアカウントが属するデータベースを表示できます。

      • 複数のテーブルを管理する権限をアカウントに付与する: test02 という名前のアカウントを作成し、rds001 データベース内の test100、test200、および test300 テーブルを管理する権限をアカウントに付与します。

        CREATE USER `test02`@`%`IDENTIFIED BY 'passwd';
        GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test02'@'%';
        GRANT ALL PRIVILEGES ON `rds001`.`test100`  TO 'test02'@'%';
        GRANT ALL PRIVILEGES ON `rds001`.`test200`  TO 'test02'@'%';
        GRANT ALL PRIVILEGES ON `rds001`.`test300`  TO 'test02'@'%';
        GRANT SELECT ON `mysql`.`help_topic` TO 'test02'@'%';
        GRANT SELECT ON `mysql`.`func` TO 'test02'@'%';
    5. データベースからビューをクエリする権限をアカウントに付与します。

      GRANT SELECT ON <Database name>.<View name> to <Username of the account>;

      • ビューを管理する権限をアカウントに付与する: test01 アカウントに、rds001 データベースから view_test1 ビューをクエリする権限を付与します。

        GRANT SELECT ON rds001.view_test1 to test01;
      • 複数のビューを管理する権限をアカウントに付与する: test01 アカウントに、rds001 データベースから view_test1 ビューと view_test2 ビューをクエリする権限を付与します。

        GRANT SELECT ON rds001.view_test1 to test01;
        GRANT SELECT ON rds001.view_test2 to test01;
    6. データベースからテーブル内のフィールドを更新またはクエリする権限をアカウントに付与します。

      GRANT UPDATE (<Field name>) ON TABLE <Table name> to <Username of the account>;     -----テーブル内のフィールドを更新する権限をアカウントに付与します。
      GRANT SELECT (<Field name>) ON TABLE <Table name> to <Username of the account>;     -----テーブル内のフィールドをクエリする権限をアカウントに付与します。

      • フィールドを管理する権限をアカウントに付与する: test01 アカウントに、testtable テーブル内の testid フィールドを更新する権限を付与します。

        GRANT UPDATE (testid) ON TABLE testtable to test01;
      • 複数のフィールドを管理する権限をアカウントに付与する: test01 アカウントに、testtable テーブル内の test_id フィールドと test_name フィールドを更新する権限を付与します。

        GRANT UPDATE (test_id) ON TABLE testtable to test01;
        GRANT UPDATE (test_name) ON TABLE testtable to test01;

    データ管理 (DMS) で SQL 文を実行することもできます。 詳細については、「MySQL データベースのユーザー権限を管理する」をご参照ください。

FAQ

RDS インスタンスで SQL 文を実行すると、「Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation TraceId.」というエラーメッセージが表示されます。どうすればよいですか?

  • 原因: 実行した SQL 文に CREATE USER 文が含まれています。ただし、ステートメントを実行する権限がありません。

  • 解決策:

    • 解決策 1:特権アカウント を使用して RDS インスタンスにログインし、SQL 文を実行します。

    • 解決策 2:GRANT CREATE USER ON *.* TO 'your_user'@'host';FLUSH PRIVILEGES; 文を実行して、標準ユーザーに CREATE USER 文を実行する権限を付与します。