为了账号安全,请及时绑定邮箱和手机立即绑定

尝试授予特权时,拒绝用户'root'@'localhost'的访问。如何授予特权?

尝试授予特权时,拒绝用户'root'@'localhost'的访问。如何授予特权?

湖上湖 2019-10-05 15:17:02
我看过许多类似的问题,因此表明我已经检查了基础知识。当然,这并不意味着我没有错过任何显而易见的东西。:-)我的问题是:为什么我拒绝具有特权的用户访问权限,而我却已经在其中输入密码并被授予访问权限?(为了完整起见,我尝试输入错误的密码只是为了确保MySQL客户端在程序启动时拒绝我访问。)背景:通过ssh登录到运行MySQL服务器的计算机的外壳,我以root用户身份登录:[myname@host ~]$ mysql -u root -p -hlocalhostEnter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 62396Server version: 5.5.18-log MySQL Community Server (GPL)Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 太棒了 我对类似问题的答案的阅读表明,我应该确保特权与授予表中的权限保持最新mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)mysql> 接下来,请确保我是我认为的我:mysql> SELECT user();+----------------+| user()         |+----------------+| root@localhost |+----------------+1 row in set (0.00 sec)...真的真的很确定:mysql> SELECT current_user();+----------------+| current_user() |+----------------+| root@localhost |+----------------+1 row in set (0.00 sec)mysql> 到现在为止还挺好。现在我有什么特权?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

注意输出


SHOW GRANTS FOR 'root'@'localhost';

没有说“ ALL PRIVILEGES”,而是不得不说出root @ localhost的含义。


授予所有特权将失败,因为用户无法授予他/她没有的特权,并且服务器似乎认为这里不存在某些东西...


现在,接下来缺少什么呢?


在我的系统上,我得到以下信息:


mysql> select version();

+------------+

| version()  |

+------------+

| 5.5.21-log |

+------------+

1 row in set (0.00 sec)


mysql> SHOW GRANTS FOR 'root'@'localhost';

+---------------------------------------------------------------------+

| Grants for root@localhost                                           |

+---------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |

| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |

+---------------------------------------------------------------------+

2 rows in set (0.00 sec)


mysql> SELECT * FROM mysql.user WHERE User='root' and Host='localhost'\G

*************************** 1. row ***************************

                  Host: localhost

                  User: root

              Password: 

           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: Y

       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 <----------------------------- new column in 5.5

              ssl_type: 

            ssl_cipher: 

           x509_issuer: 

          x509_subject: 

         max_questions: 0

           max_updates: 0

       max_connections: 0

  max_user_connections: 0

                plugin: <------------------------------- new column in 5.5

 authentication_string: <------------------------------- new column in 5.5

1 row in set (0.00 sec)

5.5中还有一些新表,例如mysql.proxies_user:确保您拥有它们。


安装全新的mysql服务器实例时,安装脚本将创建具有适当结构的所有mysql。*表。


从旧版本升级时,请确保使用正确的升级过程(mysql_upgrade),它将添加缺少的表/列。


这只是一个猜测,但似乎该实例的mysql_upgrade未完成,导致出现了这种现象。


查看完整回答
反对 回复 2019-10-05
?
翻阅古今

TA贡献1780条经验 获得超5个赞

当我尝试安装比发行版随附的MySQL版本更高的MySQL版本时,发生了这种情况。


我删除了旧版本,然后安装了新版本(rpm -e ...然后是rpm -i MySQL-server *),但没有意识到/ var / lib / mysql中的文件仍然来自较早版本(区别在于由Marc Alff解释-谢谢!)


我本可以做一个mysql_upgrade,但是由于我想从头开始,所以我做了:


# su - mysql

$ rm -rf /var/lib/mysql/*

$ mysql_install_db

# /etc/init.d/mysql start

然后设置root密码(/ usr / bin / mysqladmin -u root密码),所有命令都可以通过GRANT命令正常工作...


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 551 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号