mysql创建用户、删除用户、创建root用户和修改用户密码,grant分配权限,查询测试,以及库中授权表解析

时间:2022-02-24 16:01:20

一、创建mysql用户

1 创建mysql数据库的管理用户

    /usr/bin/mysqladmin -uroot password mopgaming    

        password前面一定不能--password,那是登录时需要输入的。如上命令回车即可。


2.1 创建一般用户,并授权 GRANT

    工作中web服务器和mysql服务器不在同一台机器上,所以需要通过mysql的远程账户访问mysql


语法:

mysql> grant [权限1,权限2,..权限n] on [数据库名].[表名] to ['用户名']@['web服务器ip地址'] identified by ['密码'];

    grant all privileges on lottery.* to test@'%' identified by 'mopgaming';

    flush privileges;    刷新系统权限

  授权test用户所有的权限,针对lottery数据库的所有表,test用户可以被任意ip登录,验证密码mopgmaing

    grant select,update,create on lottery.* to test@x.x.x.x identified by 'mopgaming';

    flush privileges;    刷新系统权限

  授权test用户select,update,create权限,针对lottery数据库的所有表,并且只有指定ip(x.x.x.x)才能登录该用户,验证密码mopgaming


a.数据库操作权限,14个权限:

    select,update,create,insert,delete,drop,index,alter,grant,references,reload,shutdown,process,file

    也可以被all privileges或者all代替,赋予所有权限。


b.数据库表名称:

    可以被 *.* 代替,表示针对该服务器上所有数据库和表授权


c.用户地址:

    可以是localhost,只针对本地用户,可以在本地登录mysql。也可以是ip,hostname主机名,域名,针对指定主机授权,创建的用户不能本地mysql -uxxxx -p形式登录。也可以是  '%' ,表示授权任何主机连接,创建的用户不能本地mysql -uxxxx -p形式登录,‘10.10.86.%’指定给该网段的主机授权。


d.验证密码:

    不能为空,否则创建失败,授权失败。


2.2 创建用户方法二

 #create user 'xxx(用户名)'@'用户地址(ip/localhost/域名/%)' identified by 'xxx(验证密码)'

 #mysql -uroot -pmopgaming

    >cteate user test2@localhost identified by 'mopgaming';

    >flush privileges;    刷新系统权限

该方法创建test2用户可以登上,但是没有授予mysql数据库任何操作权限,只能使用当前用户下生成的数据库。若再grant授权,则可以正常使用:

    >grant all privileges on *.* to test2@'%' identified by 'mopgaming';

    >flush privileges;    刷新系统权限


二、撤销用户权限

  revoke 权限 on 库名.表名 from 用户名@用户地址;

  mysql -uroot -p

    >revoke select,insert on *.* from test2@'%';  撤销test2用户select,insert权限。

    >revoke all on test.* from test2@'%';  撤销test2用户,针对test库的所有权限。       


三、删除用户

1 直接删除用户 drop user:将用户信息全部删掉,包括user表和mysql.db表中的权限信息。

  mysql -uroot -p

    >drop user test1@'%'; 

    >flush privileges;   


2 删除用户 delete from user:只会清除对应user创建的表,其他比如db表中信息还是存在。(通过 >select * from db;还可以看到该用户对应的权限。如果delete删除该用户后,再最小权限创建一个同名的用户,那么会重用以前的权限。)  

  mysql -uroot -p

    >use mysql;

    >delete from user where user=test1 and host='%';

    >flush privileges;  


四、修改指定用户密码

  #mysql -uroot -p 

    update mysql.user set password=password('新密码') where user="test2" and host="%";

    flush privilieges;

  修改指定用户密码的命令必须按照此格式。


五、远程访问测试授权的mysql用户

    #mysql -hx.x.x.x(mysql服务器的ip) -uxxx(授权的用户名) -pxxx(验证密码)

  

 mysql -h10.10.87.105 -utest2 -pmopgaming

    Welcome to the MariaDB monitor.  Commands end with ; or \g.

    Your MariaDB connection id is 18

    Server version: 5.5.44-MariaDB MariaDB Server

    copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> 


六、查询相关命令

1 查询mysql用户列表:

MariaDB [(none)]> select host,user from mysql.user;

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

| host         | user  |

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

| 127.0.0.1    | root  |

| ::1          | root  |

| localcentos7 |       |

| localcentos7 | root  |

| localhost    |       |

| localhost    | root  |

| localhost    | test1 |

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


MariaDB [(none)]> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

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

| query                        |

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

| User: 'root'@'127.0.0.1';    |

| User: 'root'@'::1';          |

| User: ''@'localcentos7';     |

| User: 'root'@'localcentos7'; |

| User: ''@'localhost';        |

| User: 'root'@'localhost';    |

| User: 'test1'@'localhost';   |

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


2 查询授权状态:

#mysql -uroot -p 

    >use mysql;                说明数据库状态信息保存在mysql数据库下。

    > select * from db;

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

| Host | Db      | User  | Select_priv | Insert_priv | Update_priv | Delete_pri

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

| %    | test    |       | Y           | Y           | Y           | Y                

| %    | test\_% |       | Y           | Y           | Y           | Y       ..........    

| %    | test    | test2 | Y           | Y           | N           | N         

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

可见test2用户被授予的权限:只针对test数据库,有select,insert权限。


PS:mysql库中授权表解析

mysql授权表共有5个:user,db,host,tables_priv和columns_priv

每个表用途和内容”

user表:

列出服务器的用户及其口令,并且指出他们有那种权限。在user表总启用的权限都是全局权限,并适用所有数据库。例如,某用户启用delete权限,则可以在任何表中删除记录。

db表:

列出具体数据库对应的权限。在这里指定的权限适用于一个数据库中所有表。

host表:

host表和db表结合使用在一个较好层次上控制特定主机对数据库的访问权限。这个表不受grant和revoke语句的影响,所以,可能根本用不到。

tables_priv表

指定表级别的权限,在这里指定的一个权限适用于一个表的所有列。

columns_priv表

指定表内列级别的权限,在这里指定的权限适用于一个表的特定列。



参考资料:

1.Linux下给mysql创建用户分配权限

http://blog.csdn.net/chaoloveyou/article/details/6664718

2.linux下创建mysql用户

http://blog.sina.com.cn/s/blog_4c6e822d0102dyd5.html

3.MySql中添加用户,新建数据库,用户授权,删除用户,修改密码

http://blog.csdn.net/h1017597898/article/details/9815987

4.MySQL中授权(grant)和撤销授权(revoke)

http://blog.csdn.net/andy_yf/article/details/7487519