使用EMS MySQL Manager Pro(3.4.0.1)連接MySQL 5.6.20時,報錯:“SELECT command denied to user [email protected] for table 'proc' 很是納悶,後面使用同樣的許可權,發現使用命令工具mysql -h... ...
使用EMS MySQL Manager Pro(3.4.0.1)連接MySQL 5.6.20時,報錯:“SELECT command denied to user [email protected] 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連接資料庫時,不會去查詢相關的存儲過程、函數等對象。就不會報這個錯誤。但是呢,這樣就會在工具裡面看不到這些對象。