通過控制台建立的資料庫帳號,預設情況下可以選擇授予其管理整個資料庫的許可權。如果需要限制帳號僅管理資料庫中的某些表、視圖或欄位,則可以通過 SQL 命令進行精細化授權。
前提條件
操作步驟
使用高許可權帳號,通過命令列、用戶端串連RDS MySQL執行個體。
執行以下命令,建立新使用者並授予其管理特定資料庫中表、視圖和欄位的許可權。
說明此帳號在控制台上無法查看到所屬資料庫。
建立新使用者:
CREATE USER `<使用者名稱>`@`%` IDENTIFIED BY '<密碼>';
為使用者授予全域許可權(如
PROCESS
和複製相關許可權):GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<使用者名稱>'@'%';
為使用者授予對指定資料庫中表的完全控制許可權:
GRANT ALL PRIVILEGES ON `<資料庫名>`.`<表名>` TO '<使用者名稱>'@'%';
為使用者授予對
mysql
系統資料庫中常用表的唯讀許可權:GRANT SELECT ON `mysql`.`help_topic` TO '<使用者名稱>'@'%'; GRANT SELECT ON `mysql`.`func` TO '<使用者名稱>'@'%'; GRANT SELECT ON `mysql`.`time_zone` TO '<使用者名稱>'@'%'; GRANT SELECT ON `mysql`.`slow_log` TO '<使用者名稱>'@'%'; GRANT SELECT ON `mysql`.`proc` TO '<使用者名稱>'@'%'; GRANT SELECT ON `mysql`.`general_log` TO '<使用者名稱>'@'%'; -- 其他系統資料表許可權可根據需求添加
樣本
授權單表:建立新使用者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
資料庫中所有表的許可權,並且可以在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 <資料庫名>.<視圖名> to <使用者名稱>;
樣本
授權單個視圖:授權使用者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 (<欄位名>) ON TABLE <表名> to <使用者名稱>; -----授權更新表中欄位 GRANT SELECT (<欄位名>) ON TABLE <表名> to <使用者名稱>; -----授權查詢表中欄位
樣本
授權單個欄位:授權使用者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;
除了通過SQL命令,也可以在DMS上進行修改。詳情請參見MySQL資料庫帳號許可權管理。
常見問題
Q:執行SQL報錯提示“Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation TraceId.”怎麼解決?
A:
報錯原因:SQL指令碼裡麵包括CREATE USER許可權的語句,您當前帳號許可權不足。
解決方案:
(方式一)使用高許可權帳號登入資料庫後執行。
(方式二)通過
GRANT CREATE USER ON *.* TO 'your_user'@'host';FLUSH PRIVILEGES;
為普通帳號授予CREATE USER許可權後再執行。