デフォルトでは、ApsaraDB RDS コンソールで作成されたアカウントに、データベース内のすべてのデータに対する権限を付与できます。 ApsaraDB RDS for MySQL インスタンスのデータベース内の特定のテーブル、ビュー、またはフィールドに対する権限を付与する場合、必要な SQL 文を実行して詳細な権限付与を実行できます。
前提条件
特権アカウントが作成されていること。 詳細については、「アカウントを作成する」をご参照ください。
手順
特権アカウントを使用して、クライアントまたは CLI を使用して RDS インスタンスに接続する。
SQL 文を実行してアカウントを作成し、データベース内のテーブル、ビュー、およびフィールドを管理する権限をアカウントに付与します。
説明作成されたアカウントには、ApsaraDB RDS コンソールで承認されたデータベースを表示する権限がありません。
アカウントを作成します。
CREATE USER `<Username of the account>`@`%` IDENTIFIED BY '<Password of the account>';
PROCESS
やレプリケーション関連の権限など、グローバル権限をアカウントに付与します。GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<Username of the account>'@'%';
特定のデータベース内のテーブルに対するすべての権限をアカウントに付与します。
GRANT ALL PRIVILEGES ON `<Database name>`.`<Table name>` TO '<Username of the account>'@'%';
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'@'%';
データベースからビューをクエリする権限をアカウントに付与します。
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;
データベースからテーブル内のフィールドを更新またはクエリする権限をアカウントに付与します。
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 文を実行する権限を付与します。