問題描述:
程序在本地可以正常連接 mysql 數據庫,但是,通過 maven 打包成 可以執行的 jar 部署到 linux 環境上,啓動就拋:
2019-12-17 15:07:34 [ERROR] - method:
com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:660)- % -- [dataSource init error] -- %
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Access denied for user 'root'@'192.168.1.16' to database 'test_db'
遇到問題,先別慌。查看錯誤日誌,看錯誤日誌說了什麼。
Access denied for user 'root'@'192.168.1.16' to database 'test_db'
翻譯成中文就是:拒絕用戶'root'@'192.168.1.16' 訪問test_db數據庫。
爲什麼會拒絕 root 訪問呢?
有拒絕訪問關鍵字,說明肯定和權限扯得上關係。那麼,我們查看下 MySQL 用戶授予的權限看看:
SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
可以,發現 192.168.1.16 主機的 Grant_priv 和 Select_priv 操作權限都是 N
Grant_priv 關鍵字意思:確定用戶是否可以將已經授予給該用戶自己的權限再授予其他用戶。
例如,如果用戶可以插入、選擇和刪除foo數據庫中的信息,並且授予了GRANT權限,則該用戶就可以將其任何或全部權限授予系統中的任何其他用戶。
Select_priv 關鍵字意思:確定用戶是否可以通過SELECT命令選擇數據。
那麼,我們可以給 192.168.1.16 這個主機設置操作權限:
UPDATE mysql. USER SET
Grant_priv = 'Y',
Super_priv = 'Y'
WHERE
HOST = '192.168.1.16';
FLUSH PRIVILEGES;
此時,jar 應用程序重啓再訪問正常了。