背景:新安装的mysql8,授权了root用户可以远程登录,发现root用户无法授权。

解决方案:

  1. 查看mysql库中的user表
mysql> select * from mysql.user where User='root' and Host='%'\G; #执行的命令,下面是输入内容
*************************** 1. row ***************************
                    Host: %
                    User: root
             Select_priv: Y
             Insert_priv: Y
             Update_priv: Y
             Delete_priv: Y
             Create_priv: Y
               Drop_priv: Y
             Reload_priv: Y
           Shutdown_priv: Y
            Process_priv: Y
               File_priv: Y
              Grant_priv: N     
         References_priv: Y
              Index_priv: Y
              Alter_priv: Y
            Show_db_priv: Y
              Super_priv: Y
   Create_tmp_table_priv: Y
        Lock_tables_priv: Y
            Execute_priv: Y
         Repl_slave_priv: Y
        Repl_client_priv: Y
        Create_view_priv: Y
          Show_view_priv: Y
     Create_routine_priv: Y
      Alter_routine_priv: Y
        Create_user_priv: Y
              Event_priv: Y
            Trigger_priv: Y
  Create_tablespace_priv: Y
                ssl_type:
              ssl_cipher: 0x
             x509_issuer: 0x
            x509_subject: 0x
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: caching_sha2_password
   authentication_string: $A$005$\
Se0j4gt5eio/Ldo6f0MwfCCmFPdQrx4UUF8lm7JzPU0
        password_expired: N
   password_last_changed: 2024-07-17 16:56:46
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: Y
          Drop_role_priv: Y
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL
1 row in set (0.00 sec)

注:通过上面查看明显能看出Grant_priv: N,说明没有Grant权限。

  1. 解决:
mysql> update mysql.user set Grant_priv='Y' where User='root' and Host='%';

执行update 方法将N改成Y即可,这里需要注意的是用户和主机一定作为条件填写正确,避免造成其他问题。

  1. 刷新权限并重新登录即可。
mysql> flush privileges;