1.7. MySQL
数据库账户及授权
1.7.1.
密码策略
1、从
MySQL 8.0
开始,默认身份验证插件从
mysql_native_password
更改为
caching_sha2_password
2、MySQL 5.7
的默认密码插件一直以来都是
mysql_native_password
。拥有密码验证快的优点,
无需在网络 中发送实际密码,并且不需要加密的连接。然而,mysql_native_password
依赖于
SHA1
算法,但
NIST
(美国国家标准与技术研究院)已建议停止使用
SHA1
算法,因为
SHA1
和
其他哈希算法(例如MD5)已被证明非常容易破解
查看数据库当前密码策略:
![](https://i-blog.csdnimg.cn/direct/e38d8d4cc3a84945906870f18b1e1bb2.png)
查看密码设置策略
![](https://i-blog.csdnimg.cn/direct/ef199dc837124ae1bc57086759465be7.png)
![](https://i-blog.csdnimg.cn/direct/fd1f5c6f83c7418b98e4112148d6b048.png)
密码强度检查等级解释(validate_password.policy)
![](https://i-blog.csdnimg.cn/direct/82703f24948f41139a0263b7baa2f22c.png)
设置密码强度检查参数
![](https://i-blog.csdnimg.cn/direct/44518b1bf11e4e98a1cedfcaf8a36b83.png)
![](https://i-blog.csdnimg.cn/direct/ee7f26ebe0aa4e3ba15e051f751c11c8.png)
若需要永久保存密码设置策略则需要修改配置文件
![](https://i-blog.csdnimg.cn/direct/72b460eeecf74facade34f28571750c9.png)
![](https://i-blog.csdnimg.cn/direct/dc25cdbcf21f432f835cb7fc875fa485.png)
修改密码
![](https://i-blog.csdnimg.cn/direct/2549d39e3ab947a2b4c2d13d71c147dc.png)
1.7.2.
登录账户管理
1、mysql8
的账户权限管理原则:先创建账户,在赋予权限
2、用户信息存放在 mysql
数据库下的
user
表
mysql>
select user
();
#
查看当前的用户信息
mysql>
use
mysql;
mysql>
show tables
;
mysql>
desc user
;
mysql>
select user
,host,authentication_string
from user
;
1.7.3.
新建登录账户
格式
:create user 'username'@'localhost' identified by 'password';
含义
username
: 创建的用户名
localhost
: 指定该用户在哪个主机上可以登陆,如果是本地用户可用
localhost
,如果想让该用户
可以从任意远程主机登陆,可以使用通配符
%
password
: 该用户的登陆密码
示例:
![](https://i-blog.csdnimg.cn/direct/64e842b4694746d8b6a98e80af088cc9.png)
1.7.4.
账户授权
作用:通过账户权限限制普通账户的工作范围及内容,赋权原则如下:
1:root
账号绝对禁止允许任何
IP
都可以访问,即登录方式不能用
%
2:应用账号和管理账号要分离
3:赋权最小化,即一般只给
select
权限,最好不要给
update
、
insert
等编辑权限
4:密码设置合理
5:定期清理不使用的账户,将其收回权限或删除
常见的用户权限
![](https://i-blog.csdnimg.cn/direct/71abad37a3be41dfb3524aeba757fbfe.png)
![](https://i-blog.csdnimg.cn/direct/72d9f5ad6646482eae13e2c7ca53e790.png)
查看权限
![](https://i-blog.csdnimg.cn/direct/eeed0f843a2244d5bf2a64ff9b2e1845.png)
赋权语法:
grant 权限列表 on 数据库名.表名 to '用户名'@'来源地址' [identified by '密码'];
分析
权限列表: 用户的操作权限,如 SELECT , INSERT , UPDATE ,CREATE 等,如果要授予所
有的权限则使用 ALL
数据库名: 数据库名,如果 * 代表所有数据库
表名:如果 * 代表所有数据表
localhost: 指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost ,如果想让该用户
可以从任意远程主机登陆,可以使用通配符 %
示例
1
:创建
test1
账户,赋权
![](https://i-blog.csdnimg.cn/direct/fbe3cb60357f4d75b38d963d02caf211.png)
示例
2
:创建
test2
账户,设置密码,赋权
select
和
create
权限,仅通过
172.16.50.0
网段登录
示例
3
:创建
test3
账户,设置密码,赋与所有权限,仅通过
%
登录
,
登录后创建
test4
账户并赋权
PS C:
\U
sers
\A
dministrator> mysql -u root -p
mysql>
create user
'test3'
@'%' identified by '123456'
;
![](https://i-blog.csdnimg.cn/direct/a231ca10641640a48c4145a3341134e6.png)
![](https://i-blog.csdnimg.cn/direct/3028516d2235469baa2525e967862a36.png)
注意:若赋权不成功则先给
root
账户增加
system_user
权限
mysql>
grant
system_user
on
*.*
to
'root'
@'localhost'
;
#
给
root
赋权
system_user
权限
#
注意:登录主机是
%
还是
localhost
1.7.5.
回收权限
格式:
revoke 权限列表/all on 库名.表名 from '用户名'@'来源地址';
# revoke
跟
grant
的语法差不多,只需要把关键字
“to”
换成
“from”
即可
示例
4
:回收所有权限
![](https://i-blog.csdnimg.cn/direct/50f8f126e3914250826b96eb45eb4013.png)
1.7.6.
删除账户
格式:drop user
'用户名'@'访问主机名';
示例
5
:删除所有账户
![](https://i-blog.csdnimg.cn/direct/838d33a50e4a43368d709960c7dd7cd4.png)