• 【MySql】权限不足导致的无法连接到数据库以及权限的授予和撤销


    【环境参数】

    1、Host OS:Win7 64bit

    2、Host IP:192.168.10.1

    3、VM: VMware 11.1.0

    4、Client OS:CentOS 6

    5、Client IP:192.168.10.129

    6、MySql版本: 5.1.73

     【障碍再现】

        Host is not allowed to connect to this MySql Server 

        当“初次”在CentOS系统上(安装在虚拟机中)安装并且简单配置完MySql服务器之后,想要在本地访问虚拟机上的MySql数据库,当在本地输入mysql登陆命令后,出现如下图所示错误。

    简而言之,即Host(192.168.10.1)不允许连接MySql数据库。

      

    【障碍原因】

        Host端的权限不足。
        在MySql数据库服务器端的mysql数据库中,有一个user表,该表中就记录了可以登录MySql服务器的帐号相关信息,如下图所示。
      

        此时,user表中的host字段仅仅有“localhost”这一条记录,则说明了MySql服务器仅仅允许从“localhost(此处的localhost指的是虚拟机)”登录到数据库。

        因此,若想允许其他非localhost的用户访问,就要修改host字段的数值。
     
     
    【解决方案01:改表法】
        将user表中host字段中的数据修改为“%”
      
     
      注意,修改完之后,要记得“刷新权限”,否则,Host端依然无法连接到MySql上。 
      
     
    【解决方案02授权法】
     
    以下几个示例可以作为有价值的参考:(自己经过测试,可以起效)
    (1) 如果想要让数据库用户myDbUser01,使用密码myPassword,从"任何主机"连接到mysql服务器的话,可以使用如下命令:
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'myDbUser01'@'%' IDENTIFIED BY 'myPassword' WITH GRANT OPTION;
    mysql> FLUSH PRIVILEGES;
     
    (2) 如果想要让数据库用户myDbUser01,使用密码myPassword,从"ip为192.168.10.1的主机"连接到mysql服务器,可以使用如下命令:
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'myDbUser01'@'192.168.10.1' IDENTIFIED BY 'myPassword' WITH GRANT OPTION;
    mysql> FLUSH PRIVILEGES;
     
    (3) 如果想要让数据库用户myDbUser01,使用密码myPassword,从ip为192.168.10.1的主机连接到mysql服务器的"dk数据库",可以使用如下命令:
    mysql> GRANT ALL PRIVILEGES ON dk.* TO 'myDbUser01'@'192.168.10.1' IDENTIFIED BY 'myPassword' WITH GRANT OPTION;
    mysql> FLUSH PRIVILEGES;
     
     
    【拓展:撤销用户权限】
    命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host';
    说明: privilege, databasename, tablename - 同授权部分.
    例子: REVOKE SELECT ON *.* FROM 'pig'@'%';
    注意: 
      REVOKE语句只能取消用户的权限,而不可以删除用户。即使取消了所有的权限,用户仍然可以连接到服务器。
    要想彻底的删除用户,必须使用DELETE语句将该用户的记录从MySQL数据库中的user表中删除。该语句的语法格式如下:
    Delete from user where user = "user_name" and host = "host_name" ;
    使用DELETE删除用户sss,代码如下: 
    mysql> use mysql
    Database changed
    mysql> delete from user where user='sss' and host='localhost' ;
    mysql>flush privileges ;
    Query OK, 1 row affected (0.02 sec)   
    其中,delete用于删除用户,flush告诉服务器重新加载授权表。

     

    读者如要转载,请标明出处和作者名,谢谢。

    地址01:http://space.itpub.net/25851087

    地址02:http://www.cnblogs.com/zjrodger

    作者名:zjrodger 

  • 相关阅读:
    解决命令行乱码问题(中文乱码)
    Outlook 修改归档文件顶层目录名
    (职员)2015-11-11 星期三 日志
    职员)2015-11-10 星期二 日志
    职员)2015-11-09 星期一 日志
    (职员)2015-11-05 星期四 日志
    (职员)2015-11-04 星期三 日志
    (职员)2015-11-03 星期二 日志
    (职员)2015-11-02 星期一 日志
    (职员)2015-10-31 星期六 周志
  • 原文地址:https://www.cnblogs.com/zjrodger/p/4512732.html
Copyright © 2020-2023  润新知