• Mysql 用户管理


     

             账号的组成方式:用户名+主机(所以可以出现重复的用户名,跟其他的数据库不一样)

                      例如: root@localhost   root@%

    用户名:16字符以内.

    主机名:可以用主机名和IP地址,也可以用通配符

    通配符说明:172.18.10.%(IP地址为172.18.10段的所有IP地址都可以访问)


    查看用户表
          select * from mysql.user

     

    创建用户

    1.insert user表方法、
    2.create user 方法、
    3.grant  方法。

     

    1、使用INSERT语句

    mysql> insert into mysql.user (host,user,password) values ('%','john',password('123'));
    可以直接用insert语句创建相同的账户,然后使用FLUSH PRIVILEGES刷新权限来告诉服务器重载授权表:

    #也可以这样插入
    shell> mysql -u root mysql
    
    mysql> INSERT INTO mysql.user
        -> VALUES('localhost','monty',PASSWORD('some_pass'),
        -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    
    mysql> INSERT INTO user
        -> VALUES('%','monty',PASSWORD('some_pass'),
        -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    

    注意:操作INSERT INTO语句插入用户会报错:

    ERROR 1136 (21S01): Column count doesn't match value count at row 1
    意思是给表user中插入的数据列数跟表的列数不匹配。

    我的mysql版本是

    mysql> status

    Server version:         5.7.10 MySQL Community Server (GPL)


    在新的mysql中密码字段不是password了,更改为authentication_string

     

     

     

    2.CREATE USER

    通过CREATE USER命令进行创建用户

    脚本:CREATE USER 'username'@'%' [IDENTIFIED BY 'PASSWORD'] 其中密码是可选项;

    例子:CREATE USER 'john'@'192.168.189.71' IDENTIFIED BY "123";

    CREATE USER 'john@192.168.189.%' IDENTIFIED BY "123";

    CREATE USER 'john@' ;

    说明:该方法创建出来的用户只有连接数据库的权限,其它权限需要授权

     

     

     

     

    3、使用grant创建用户

    以root连接到服务器上后,可以添加新账户。下面的语句表示使用GRANT来设置账户

    mysql> GRANT all privileges ON 库名.表名 to 'monty'@'localhost'
                     -> IDENTIFIED BY 'password' WITH GRANT OPTION;

    GRANT命令说明:

    1.ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。

    2.ON 用来指定权限针对哪些库和表。*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。

    3.TO 表示将权限赋予某个用户。

    'monty'@'localhost' 表示monty用户,@ 后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。(注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。)

    4.IDENTIFIED BY指定用户的登录密码。

    5.WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。(注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其他用户授权。)

    备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加了一个SELECT权限,然后又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。

    创建四个用户:

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
        ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
    
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
        ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
    
    mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
    
    mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

    上述用GRANT语句创建的账户具有以下属性:

    其中两个账户有相同的用户名monty和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。
      一个账户 ('monty'@'localhost')只用于从本机连接另一个账户('monty'@'%')可用于从其它主机连接
            请注意monty的两个账户必须能从任何主机以monty连接。当不具有localhost账户的用户monty从本机连接时,mysql_install_db创建的localhost匿名用户账户将具有优先权限。结果是,monty将被视为匿名用户。原因是在user表中匿名用户账户的Host列值比monty'@'%账户更具体(%相当于空HOST),这样在user表中排序是排在前面。

    第三个账户有用户名admin,但没有密码。该账户只能用于本机连接。上面第三条语句中授予admin用户RELOAD和PROCESS管理权限;这些权限允许admin用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx以及mysqladmin processlist命令;但是它未被授予访问数据库的权限;你可以通过GRANT语句添加此类权限。

    第四个账户有用户名dummy,但是也没有密码,该账户只用于本机连接,通过GRANT语句中赋予的USAGE权限,你可以创建账户而不授予任何权限;它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。



     
    删除用户:
                    @>mysql -u root -p

      @>密码

       mysql>Delete FROM user Where User='test' and Host='localhost';

       mysql>flush privileges;

     
  • 相关阅读:
    《数据密集型应用系统设计》读书笔记
    每周总结
    每周总结
    每周总结
    《数据密集型应用系统设计》读书笔记
    每周总结
    《重构》读书笔记
    每周总结
    软件过程与管理知识回顾
    操作系统知识汇总5-6章
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896749.html
Copyright © 2020-2023  润新知