【数据库系列教程】MySQL用户管理和用户权限
【数据库系列教程】MySQL用户管理和用户权限
一、用户管理
1.用户名格式
- 用户名@客户端地址
- 客户端地址:
- IP地址 admin@192.168.1.1
- 主机名 admin@node01.linux.com
- 网段 admin@192.168.1.%
- 所有主机 admin@%
- 本机 admin@localhost
2.存储用户的表 mysql.user
- user 用户名
- host 登录地址
- (5.7版本以后)authentication_string 密码
- (5.6版本之前)password 密码
mysql> select user, host, authentication_string from mysql.user;
+-----------+-----------+-------------------------------------------+
| user | host | authentication_string |
+-----------+-----------+-------------------------------------------+
| root | localhost | *F00AFD2CA41EF081905BE7FC7051A0D3D53B49AD |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-----------+-------------------------------------------+
3.创建用户(只能登录MySQL)
命令格式
create user 用户名@客户端地址 identified by '密码'
创建只允许本机登录的MySQL用户admin
mysql> create user 'admin'@"localhost" identified by "WWW.1.com";
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+-----------+-----------+
| user | host |
+-----------+-----------+
| admin | localhost |
| mysql.sys | localhost |
| root | localhost |
+-----------+-----------+
3 rows in set (0.00 sec)
创建远程连接用户admin
mysql> create user 'admin'@'192.168.140.11' identified by 'WWW.1.com';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; #刷新用户表信息
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
远程用户验证
[root@localhost ~]# mysql -uadmin -pWWW.1.com -h <数据库服务器地址>
在数据库服务器查看都有哪些用户连接
mysql> show processlist;
+--------+--------+----------------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+--------+----------------------+------+---------+------+----------+------------------+
| 509975 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 509976 | martin | 192.168.140.11:33616 | NULL | Sleep | 54 | | NULL |
+--------+--------+----------------------+------+---------+------+----------+------------------+
创建所有地址都可连接的admin用户
mysql> create user 'admin'@'%' identified by 'WWW.1.com'; #%为通配符
Query OK, 0 rows affected (0.00 sec)
4.删除用户
命令格式
drop user 用户名@客户端地址
mysql> drop user 'admin'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
5.修改用户密码
方法1
set password for 用户@地址 = PASSWORD("密码"); #PASSWORD()是MySQL自带的函数
mysql> set password for 'admin'@'192.168.140.11' = PASSWORD("WWW.2.com");
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
方法2
update 库.表 set authentication_string=PASSWORD("密码") where 条件
mysql> update mysql.user set authentication_string=PASSWORD("WWW.3.com") where user="admin" and host="192.168.140.11";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
方法3(一般用于重置root密码)
编辑配置文件
[root@localhost ~]# vim /etc/my.cnf
[mysqld] #添加以下内容
skip-grant-tables=1 #跳过授权表
重启服务
[root@localhost ~]# systemctl restart mysqld
回到Mysql使用update更新密码
[root@localhost ~]# mysql -uroot -p #此时登录是不需要密码的
mysql> update mysql.user set authentication_string=PASSWORD("WWW.1.com") where user="root" and host="localhost";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
删除刚刚配置文件添加的字段
[root@localhost ~]# vim /etc/my.cnf
重启MySQl服务
[root@localhost ~]# systemctl restart mysqld
二、用户权限管理
1.查看用户权限
mysql> show grants for 'admin'@'192.168.140.11';
+------------------------------------------------+
| Grants for admin@192.168.140.11 |
+------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.140.11' |
+------------------------------------------------+
1 row in set (0.00 sec)
USAGE:默认最小的权限
2.用户授权
- 几个基本权限:
- create 创建
- drop 删除
- select 查询
- update 更新
- delete 删除
- insert 插入
- all 所有权限
命令格式
grant 权限,权限,权限 on 库名.表名 to 用户名 [identified by "密码"]
#[]内容为可写可不写
#在MySQL5.x版本可以使用上述格式命令直接创建用户,并且授权权限
mysql> grant select on jiaowu.tutors to 'admin'@'192.168.140.11';
mysql> flush privileges;
mysql> show grants for 'admin'@'192.168.140.11';
3.撤销权限(回收权限)
命令格式
revoke delete on 库.表 from 用户@地址;
mysql> revoke delete on jiaowu.students from 'admin'@"192.168.140.1";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'admin'@"192.168.140.1";
+----------------------------------------------------------------------+
| Grants for admin@192.168.140.1 |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.140.1' |
| GRANT SELECT, DELETE ON `jiaowu`.`tutors` TO 'admin'@'192.168.140.1' |
| GRANT SELECT ON `jiaowu`.`students` TO 'admin'@'192.168.140.1' |
+----------------------------------------------------------------------+
3 rows in set (0.00 sec)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WangShengJJのblog!