数据库用户管理
一、用户管理
1.1 新建用户
命令
CREATE USER ’ 用户名 ’ @ ’ 来源地址 ’ [IDENTIFIED BY [PASSWORD] ’ 密码 ’ ] ;
解释
- 用户名:指定将要创建的用户名
- 来源地址:新创建的用户可以在哪些主机上登录,可以使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录,使用通配符 %
- 密码
- 使用明文密码直接输入即可,插入到数据库时自动加密
- 加密密码需要先试用 SELECT PASSWORD( ’ 密码 ’ ); 获取密文,再在语句中添加 PASSWORD ’ 密文 ’
- 若不适用密码,则忽略 “IDENTIFIEN BY ”部分,但是不建议这样操作
测试
- 创建用户user01 ,密码使用明文
create user 'user01'@'localhost' identified by '123456';
- 创建用户user02,密码使用加密
create user 'user02'@'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
- 获取加密的密码
select password('123456');
+-------------------------------------------+
| password('123456') |
+-------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------------------------+
6.2 查看用户信息
创建的用户保存在 mysql 数据库的 user 表里
#进入MySQL数据库
use mysql;
#查看用户信息
select user,authentication_string,host from user;
6.3 重命名用户
将user02 改名 user03
rename user 'user02'@'localhost' to 'user03'@'localhost';
6.4 删除用户
删除 user01 用户
drop user 'user01'@'localhost';
6.5 修改当前登录用户密码
set password = password('cc123');
6.6 修改其他用户密码
mysql> set password for 'user03'@'localhost' = password('cc123');
6.7 忘记root密码的解决方法
第一步:修改指定配置文件,不适用密码登录MySQL
- vim /etc/my.cnf
[mysqld]
skip-grant-tables # 添加该行
- systemctl restart mysqld.service
第二步:使用 update 修改密码,刷新数据库
#修改密码
update mysql.user set authentication_string = password('123456') where user ='root';
#刷新数据库
flush privileges;
quit
设置完后,需要把配置文件内的新增内容删除,并重启服务
二、数据库用户授权
2.1 授权
- GRANT语句
- 专门用来设置数据库用户的访问权限
- 当指定的用户名不存在时,GRANT语句将会创建新的用户
- 当指定的用户存在时,GRANT语句用于修改用户信息
命令
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
- 权限列表
- 用于列出授权使用的各种数据库操作,以逗号分隔
- 如 “ select , insert , update ”。使用 all 表示所有权限,可授权执行任何操作
- 数据库名.表名
- 用于指定授权操作的数据库和表的名称
- 可以使用通配符 * ,如 dcc.* 表示授权对象为dcc数据库的所有表
- 用户名@来源地址
- 指定用户名称和允许访问的客户机地址,即谁能连接,从哪连接
- 来源地址可以是域名、IP地址 还可以使用通配符 % 表示某个区域或网段内的所有地址
- 如 %.cc.com、192.168.253.% 等
- IDENTIFIEN BY
- 设置用户连接数据库所要用的密码字符串
- 若省略,则用户的密码为空
测试
- 设置 user03 用户允许在本地查询 dcc 数据库中的所有数据记录,不能查询其他的
grant select on dcc.* to 'user03'@'localhost' identified by '123456';
flush privileges; # 设置完需要刷新
use dcc;
show tables;
+---------------+
| Tables_in_dcc |
+---------------+
| ccc01 |
| ccc02 |
| ccc03 |
| dd01 |
| dd02 |
+---------------+
use mysql; # 无法查询其他
ERROR 1044 (42000): Access denied for user 'user03'@'localhost' to database 'mysql'
- 允许用户 user01 在所有终端远程连接 MySQL,并拥有所有权限
grant all [privileges] on *.* to 'user01'@'%' identified by '123456';
flush privileges; # 刷新数据库
2.2 查看权限
SHOW GRANTS FOR 用户名@来源地址;
show grants for 'user01'@'%';
2.3 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;
revoke all on *.* from 'user01'@'%';
show grants for 'user01'@'%';
+------------------------------------+
| Grants for user01@% |
+------------------------------------+
| GRANT USAGE ON *.* TO 'user01'@'%' |
+------------------------------------+
1 row in set (0.00 sec)
USAGE 权限表示只能用于数据库登录,不能执行操作,此权限无法回收,所以 revoke 不能删除用户