在這篇的茶包在一開始小弟也覺得不可思議,但找到問題後,真的是感觸良多。
此篇所遇到的狀況是在某一台資料庫主機上使用 ROOT 登入,但是在 GRANT 的時候一直出現
mysql> GRANT ALL PRIVILEGES ON DBNAME.* TO USER@localhost;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
首先遇到這個狀況先檢查了一下
mysql> SHOW GRANTS FOR root@localhost \G;
SHOW GRANTS FOR root@localhost \G;
*************************** 1. row ***************************
Grants for root@localhost: GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '******' WITH GRANT OPTION
*************************** 2. row ***************************
Grants for root@localhost: GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION
確認權限是 GRANT ALL
mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user \G;
*************************** 1. row ***************************
host: localhost
user: root
password: **********************
Grant_priv: Y
Super_priv: Y
*************************** 2. row ***************************
在確認一次 Grant_priv / Super_priv 都是 Y
權限都沒有問題,操作也都OK,但是在 GRANT 就是失敗,真是鬼打牆
最後在執行 mysql_upgrade 之後就可以 GRANT 了
$ mysql_upgrade -uroot -p
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.servers OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Running 'mysql_fix_privilege_tables'...
OK
這台資料庫是 MySQL 5.5,原來是因為資料庫升級了而造成 mysql 資料庫損壞
在官方是有提醒只要是升級都必須要執行 mysql_upgrade
在官方是有提醒只要是升級都必須要執行 mysql_upgrade
在官方是有提醒只要是升級都必須要執行 mysql_upgrade
這點非常的重要!!
Orignal From: 茶包專欄:MySQL 使用 ROOT 也無法 GRANT 權限 Access denied
沒有留言:
張貼留言