RDS MySQL 100%相容開源MySQL,如需瞭解完整的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串連)
-- 該方式與RDS控制台帳號建立邏輯一致,後續可通過RDS控制台刪除帳號
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
-- 建立僅允許從指定網段登入的帳號
-- 若建立帳號時指定了IP或網段,後續通過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>';刪除帳號,此方式可能導致許可權殘留、中繼資料不一致等情況。 | -- 刪除名app_user且只允許從192.168.1.x網段登入的帳號
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庫所有表的查詢許可權
GRANT SELECT ON app_db.* TO 'app_user'@'%';
-- 授予app_db庫中users表的增刪改查許可權
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.users TO 'app_user'@'%';
-- (謹慎使用)授予app_db庫所有許可權,僅允許來自192.168.1.x網段的用戶端串連
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視圖。 | -- 查看帳號app_user從192.168.1.%主機登入時擁有的所有資料庫許可權
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使用。 | --撤銷帳號app_user從192.168.1.%登入時在所有資料庫上的全部操作許可權和授權能力
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'192.168.1.%';
-- 撤銷使用者app_user從10.10.0.%登入時對shop_db庫中users表的修改資料許可權
REVOKE UPDATE ON shop_db.users FROM 'app_user'@'10.10.0.%';
|
常見問題
通過RDS控制台刪除帳號報錯?
問題描述
在RDS MySQL控制台帳號管理頁面刪除使用者時報錯刪除賬戶失敗,請檢查輸入的參數或請求。執行個體中可能存在其他進程正在等待鎖,或者該資料庫賬戶的host值未設定為%,即允許任意主機登入。
解決方案
通過RDS MySQL控制台建立的使用者帳號預設主控件白名單為%,即允許任意主機訪問。若帳號是通過SQL命令手動建立,且建立時指定了僅允許IP或網段登入(如'username'@'10.10.10.1'或'username'@'10.%.%.%'),則該帳號無法通過RDS控制台刪除。
請執行如下SQL先查詢待刪除帳號是否為非%配置,若主機host為非%形式,則不允許通過RDS控制台刪除,需要通過DROP user命令列方式刪除。
-- 檢查待刪除帳號是否為非%配置(如192.168.1.1、192.168.1.%等)
SELECT user,host FROM mysql.user WHERE user='待刪除使用者名稱';
-- 若主機host為非%形式,需通過DROP命令刪除帳號
DROP user 'user'@'host';DROP USER '待刪除使用者名稱'@'目標主機IP或網段';