使用EMS MySQL Manager Pro(3.4.0.1)連接MySQL 5.6.20時,報錯:“SELECT command denied to user xxx@xxx.xxx.xxx.xxx for table 'proc'
很是納悶,后面使用同樣的權限,發現使用命令工具mysql -h xxxx -u username -p連接時不會報錯。個人猜測是因為EMS MySQL Manager(3.4.0.1)連接數據庫時,會去查詢mysql.proc表獲取相關的對象(存儲過程、函數等)。於是在測試服務器開啟了MySQL查詢日志,然后在客戶端電腦使用EMS MySQL Manager Pro連接到數據庫(Connect to Database),然后檢查查詢日志具體信息,發現如下所示,EMS MySQL Manager連接數據庫時確實會去查詢mysql.proc, 而因為權限問題,所以報如上錯誤:
#tail -60f /var/lib/mysql/mytestlnx02.log
/usr/sbin/mysqld, Version: 5.6.41 (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
190108 14:54:07 111 Connect mytest@letnb00021 on
111 Query SHOW VARIABLES
111 Query SHOW STATUS
111 Quit
112 Connect mytest@letnb00021 on MyDB
112 Query BEGIN
112 Query show collation
112 Query SHOW VARIABLES
112 Query SHOW ENGINES
112 Query SHOW FULL TABLES
112 Query SHOW FULL TABLES
112 Query SHOW COLUMNS FROM `mysql`.`proc`
112 Query SHOW INDEX FROM `mysql`.`proc`
112 Query select p.`db`, p.`name`, p.`type`, p.`specific_name`, p.`language`, p.`sql_data_access`, p.`is_deterministic`, p.`security_type`, p.`param_list`, p.`returns`, p.`body`, p.`definer`, p.`created`, p.`modified`, p.`sql_mode`, p.`comment` from `mysql`.`proc` as p where p.`type` = 'PROCEDURE' and p.`db`='MyDB'
解決方案:
1:使用root賬號登錄數據庫,執行下面SQL語句授予相關查詢權限,即可解決問題(使用具體賬號替換usename)
grant select on mysql.proc to username
2: 在EMS MySQL Manager工具對應的Register Database的"Display Options" 選項里面,取消"Procedures"、"Functins"選項也可以解決問題。這樣EMS MySQL Manager連接數據庫時,不會去查詢相關的存儲過程、函數等對象。就不會報這個錯誤。但是呢,這樣就會在工具里面看不到這些對象。