1. 程式人生 > >MySQL:select command denied to user for table 'proc'案例

MySQL:select command denied to user for table 'proc'案例

使用EMS MySQL Manager Pro(3.4.0.1)連線MySQL 5.6.20時,報SELECT command denied to user [email protected] for table 'proc'

 

 

clip_image001

 

很是納悶,後面使用同樣的許可權,發現使用命令工具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   [email protected] on 
                  111 Query     SHOW VARIABLES
                  111 Query     SHOW STATUS
                  111 Quit
                  112 Connect   [email protected] 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: 在對應的Register Database裡"Display Options" 取消"Procedures"、"Functins"、"UDFS"也可以。這樣EMS MySQL Manager連線資料庫時,不會去查詢相關的儲存過程、函式等物件。就不會報這個錯誤。但是呢,這樣就會在工具裡面看不到這些物件。

 

   

clip_image002