欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

等保测评2.0:MySQL身份鉴别(上)

来源:本站整理 作者:佚名 时间:2020-03-17 TAG: 我要投稿

一、 说明
本篇文章主要说一下MySQL数据中身份鉴别控制点中a测评项的相关知识点和理解。
二、 MySQL用户
2.1. 用户身份标识
MySQL数据库对于用户的标识和其它数据库有些不一样,不仅仅是用户名,而是username + host。
MySQL数据中user表的一部分字段如下:

这三个用户的用户名虽然都是root,但其实是三个不同的用户,其密码也是单独设置的。
查询当前登录账户,也可以看到用户的标识组成为username+host:

2.2. 登录匹配机制
既然用户的标示是两个字段的组合,匹配的时候也要这两个字段都匹配上了才行,这里我简单的说一说(根据官方文档)。
当客户端对MySQL发起连接后,MySQL会先对user表进行排序,然后从第一行开始,逐行与传入的host、username进行匹配,当匹配到了某一行之后,就不往下继续匹配了。(如果任何一行都无法匹配,则登录失败)
此时,再来对比传入的口令和存储的口令是否一致,如果口令一致,那么该行即为这次登陆后所使用的行(用户身份)。
如果不一致,则登录失败。
举个例子,如果用户表如下所示:

那么当验证时,会首先对其进行排序,排序如下:

注意,Host字段可以使用匹配符%,%则代表匹配任何Ip地址。另外,空字符串也代表匹配任何Ip地址。
而User字段不使用匹配符%,但是如果为空字符串,则代表匹配任何用户名。

MySQL排序时是先对Host进行排序,然后才是User。
Host的排序为明确的值排在前面,比如文字主机名和IP地址即为明确的地址值,所以%和空字符串排在它们之后,其中空字符串又排在%之后。
当Host字段向同时,则对User字段进行排序,对于User字段也是明确的值排在前面,所以在排序结果图中,root@localhost排在了@localhost(空字符串用户名)的前面。
如果Host字段和User字段都一样,那么排序的顺序是不确定的(可能和创建该用户的先后有关)。
所以客户端连接MySQL数据库时,使用给定的用户名,不一定会以该用户名的身份登入数据库。
比如使用用户名jeffrey和它的口令,在本地的mysql中进行登录时,会按照排序结果图中,一行行的去匹配:

对于第一行,客户端的Host(localhost或者127.0.0.1)可以和Host字段的localhost匹配上,但是User不一样,无法完全匹配,所以往下走。
对于第二行,客户端的Host(localhost或者127.0.0.1)可以和Host字段的localhost匹配上,而第二行的用户名是空字符串,可以匹配任何用户名,所以也能匹配jeffrey,如果口令一致,则完成了匹配,到此匹配过程结束。
这样,虽然使用了用户名jeffrey,但最后却会以@localhost的身份登入数据库。
最后,User表的口令字段可以为空字符串,这代表口令为空字符串,而不是与任何口令都匹配。
2.3. 查询当前用户
MySQL中存在user()函数和current_user()函数。
user()函数会显示你当前的登录用户具体是使用了什么用户名和什么ip地址去进行登录的。(注,ip地址是指连接数据库的客户端的ip地址,不是自己设置的值)
例子如下:

这里代表在ip地址为192.168.203.132的客户端上,使用用户名test对MySQL数据库进行了连接。
current_user()函数会显示你最终使用的用户身份(也就是最后匹配到的那一行),例子如下:

也就是,最后在User表中匹配到了Host字段为192.168.%.%、User字段为test的那一行,以test@192.168..%.%的用户身份登录了MySQL数据库。
2.4. 口令字段
在MySQL5.7之前,User表中的口令字段为Password,从MySQL5.7开始,口令字段变成了authentication_string。
不过在MySQL5.7之前,比如MySQL5.5.53,也存在着authentication_string字段,不知道其用途是什么。
三、测评项a
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
3.1. 测评项要求1
应对登录的用户进行身份标识和鉴别
对于MySQL来说,如上文所言,用户的身份标识为username + host,鉴别就是通过username + host + password来进行登录验证。
所以,对于这个要求,就是不能出现空用户名、空密码、任意host的用户,也就是鉴别的因素三者同时皆空。
其中任何一个不为空或%(对Host而言),则都算实现了鉴别(部分鉴别)。
3.2. 测评项要求2
身份标识具有唯一性
对于MySQL来说,如上文所言,用户的身份标识为username + host,MySQL并没有禁止出现完全一样的username + host行,所以这里是可能出现身份标识不唯一的情况的。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载