ApsaraDB RDS for MySQL は オープンソースの MySQL と 100% 互換性があります。SQL コマンド、関数、パラメーター、および制限に関する完全な情報については、「公式 MySQL リファレンスマニュアル」をご参照ください。
データベース管理
カテゴリ | SQL 構文 | 例 |
データベースの作成 | -- データベースを作成します。
CREATE DATABASE <database name>;
-- データベースを作成し、文字セットと照合順序を指定します。
CREATE DATABASE <database_name>
DEFAULT CHARACTER SET <charset>
COLLATE <collation>;
| -- app_db データベースを作成します。
CREATE DATABASE app_db;
-- app_db データベースを作成し、文字セットを指定します。より多くの文字をサポートするため、utf8mb4 の使用を推奨します。
CREATE DATABASE app_db
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 特定のシナリオのために、データベースを作成し、中国語の文字セットを指定します。
CREATE DATABASE cn_db
DEFAULT CHARACTER SET gbk
COLLATE gbk_chinese_ci;
|
データベースの削除 | DROP DATABASE <database name>;
| DROP DATABASE app_db;
|
アカウント管理
カテゴリ | SQL 構文 | 例 |
アカウントの作成 | CREATE USER 'username'@'host' IDENTIFIED BY 'password';
| -- 任意の IP アドレスからログインできるアカウントを作成します。パーセント記号 (%) は、任意の IP アドレスからの接続が許可されていることを示します。
-- このメソッドは、ApsaraDB RDS コンソールでアカウントが作成される方法と一致しています。後で ApsaraDB RDS コンソールでアカウントを削除できます。
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
-- 特定の CIDR ブロックからのみログインできるアカウントを作成します。
-- アカウント作成時に IP アドレスまたは CIDR ブロックを指定すると、後で ApsaraDB RDS コンソールでアカウントを削除しようとしたときにエラーが報告されます。SQL コマンドを実行してアカウントを削除する必要があります。
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
|
アカウントの削除 | DROP USER 'username'@'host';
重要 アカウントを削除するために DELETE FROM mysql.user WHERE User = '<username>' AND Host = '<host>'; コマンドを使用しないでください。このメソッドは、残留権限を残したり、メタデータの不整合を引き起こしたりする可能性があります。 | -- 192.168.1.x CIDR ブロックからのみログインできる app_user アカウントを削除します。
DROP USER 'app_user'@'192.168.1.%';
|
権限の付与 | GRANT SELECT ON db01.* TO 'username'@'host';
GRANT <privilege> ON <level> TO 'username'@'host';
-- <privilege>: SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES などの権限。
-- <level>: db_name.* (データベースレベル)、db_name.table_name (テーブルレベル)、*.* (グローバルレベル) などの権限レベル。
説明 すべてのデータベースに対する完全な制御を付与するために GRANT ALL PRIVILEGES ON *.* コマンドを実行することはできません。 | -- app_db データベース内のすべてのテーブルに対する SELECT 権限を付与します。
GRANT SELECT ON app_db.* TO 'app_user'@'%';
-- app_db データベースの users テーブルに対する SELECT、INSERT、UPDATE、DELETE 権限を付与します。
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.users TO 'app_user'@'%';
-- (注意して使用) app_db データベースに対するすべての権限を付与します。192.168.1.x CIDR ブロックからのクライアントのみが接続できます。
GRANT ALL PRIVILEGES ON app_db.* TO 'admin_user'@'192.168.1.%';
|
アカウント権限のクエリ | -- すべてのインスタンスで作成されたすべてのアカウントと、ログオンが許可されているホスト。
SELECT user, host FROM mysql.user;
-- アカウント権限を表示します。
SHOW GRANTS FOR 'username'@'host';
説明 以前のバージョンでは、mysql.user をクエリしたときにエラーが報告された場合、代わりに mysql.user_view ビューをクエリします。 | -- 192.168.1.% CIDR ブロック内のホストからログオンするときに app_user アカウントが持つすべてのデータベース権限を表示します。
SHOW GRANTS FOR 'app_user'@'192.168.1.%';
|
アカウント権限の取り消し (アカウントは存続) | すべての権限を取り消す: すべてのデータベース上のアカウントから、すべての操作権限と権限付与機能を取り消します。 REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'username'@'host';
指定された権限を取り消す: すべてのデータベースのすべてのテーブルに対するアカウントの UPDATE 権限を取り消します。必要に応じて権限の種類を変更できます。 REVOKE UPDATE ON *.* FROM 'username'@'host';
説明 権限を取り消してもアカウントは削除されません。アカウントを完全に削除するには、DROP USER コマンドを使用します。 | -- 192.168.1.% からログオンするときに、app_user アカウントからすべてのデータベースに対するすべての操作権限と権限付与機能を取り消します。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'192.168.1.%';
-- 10.10.0.% からログオンするときに、app_user アカウントから shop_db データベースの users テーブルのデータを変更する権限を取り消します。
REVOKE UPDATE ON shop_db.users FROM 'app_user'@'10.10.0.%';
|
よくある質問
ApsaraDB RDS コンソールでアカウントを削除するとエラーが表示されるのはなぜですか?
問題の説明
ApsaraDB RDS for MySQL コンソールの [アカウント管理] ページでユーザーを削除すると、次のエラーメッセージが表示されます。アカウントの削除に失敗しました。リクエストまたは入力パラメーターを確認してください。インスタンス内の他のスレッドがロックを待っているか、現在のデータベースアカウントのホスト値が % (すべてのホストからのログインを許可) に設定されていません。
解決策
デフォルトでは、ApsaraDB RDS for MySQL コンソールで作成されたユーザーアカウントのホストホワイトリストは % に設定されており、任意のホストからのアクセスが許可されます。SQL コマンドを使用してアカウントが手動で作成され、'username'@'10.10.10.1' や 'username'@'10.%.%.%' のように特定の IP アドレスまたはネットワークセグメントからのみのログオンを許可するように設定されている場合、そのアカウントは RDS コンソールから削除できません。
次の SQL 文を実行して、アカウントのホストが % 以外の値で設定されているかどうかを確認します。ホストの値が %でない場合、RDS コンソールでアカウントを削除することはできません。アカウントを削除するには、DROP USER コマンドを使用する必要があります。
-- 削除するアカウントのホストが % 以外の値 (例: 192.168.1.1 または 192.168.1.%) で設定されているかどうかを確認します。
SELECT user,host FROM mysql.user WHERE user='username_to_delete';
-- ホスト値が % でない場合は、DROP USER コマンドを使用してアカウントを削除する必要があります。
DROP USER 'username_to_delete'@'target_host_IP_or_network_segment';