进入Mysql
通过“Mysql -u root -p ”进入MySQL命令行,开展数据库配置核查;
身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
MySQL 5.5.x及更低版本]:
1)
a)在数据库中输入
SELECT Host,User,Password,plugin FROM mysql.user;
核查是否存在空口令用户;
b)若MySQL安装并为用户启用了其他认证插件,如authentication_pam,询问数据库管理员这些用户是否设置了口令。
2)口令复杂度校验策略及定期更换策略默认不符合。
[MySQL 5.6.x]:
1)
a)在数据库中输入
SELECT Host,User,Password,plugin FROM mysql.user;
核查是否存在空口令用户;
b)若MySQL安装并为用户启用了其他认证插件,如authentication_pam,询问数据库管理员这些用户是否设置了口令。
2)
a)在数据库中输入
SELECT*FROM information schema.PLUGINS WHERE PLUGIN NAME=’validate password’;
核查是否安装了口令复杂度校验模块;
b)在数据库中输入
SHOW VARIABLES LIKE'validate_password%';
核查口令复杂度策略;c)口令定期更换策路默认不符合。
[MySQL 5.7.x及更高版本]:
1)
a)在数据库中输入
SELECT Host,User,authentication_string,plugin FROM mysql.user;
核查是否存在空口令用户;
b)若MySQL安装并为用户启用了其他认证插件,如authentication_pam,询问数据库管理员这些用户是否设置了口令。
2)
a)在数据库中输入
SELECT *FROM information schema.PLUGINS WHERE PLUGIN NAME='validate password';
核查是否安装了口令复杂度校验模块;
b)在数据库中输入
show variables like 'validate_password%';
核查口令复杂度策略;
c)在数据库中输入
SELECT Host,User,password_lifetime FROM mysql.user;
核查口令定期更换策略。
SELECT Host,User FROM mysql.user;
推荐值:
1)数据库不存在空囗令帐户。
2)
a)数据库设置了符合安全性要求的validate_password参数。
b)数据库设置了符合安全性要求的password_lifetime参数。
结果记录:
1、描述数据库是否存在空口令用户;
2、描述数据库是否安装了口令复杂度校验模块,核查口令复杂度策略;
3、描述定期更换密码策略(相关文档或强制策略)。
备注:
1) 当用户的plugin字段为空时,使用MySQL默认认证插件mysql_native_password进行身份鉴别。
2) 在数据库中输入SHOW PLUGINS可查看所有安装的插件。
3) MySQL 5.7及以上可通过设置全局变量default_password_lifetime控制口令定期更换。
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
1)应核查是否配置并启用了登录失败处理功能;
2)应核查是否配置并启用了限制非法登录功能,非法登录达到一定次数后采取特定动作,如账户锁定等;
3)应核查是否配置并启用了登录连接超时及自动退出功能。
[MySQL5.5.x及更低版本]:
1)默认不符合。
2)默认不符合。
3)在数据库中输入
SHOW global variables LIKE '%timeout';
核查连接超时connect_timeout、空闲会话超时interactive_timeout及wait_timeout的配置情况。[MySQL 5.6.x及更高版本]:
- 数据库中输入
SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_NAME='connection_control';
核查是否安装了登录失败处理模块。
- 在数据库中输入
SHOW variables LIKE 'connection_control%';
核查是否合理配置了登录失败处理功能的相关参数。
- 在数据库中输入
SHOW global variables LIKE '%timeout';
核查连接超时connect_timeout、空闲会话超时interactive_timeout及wait_timeout的配置情况。
推荐值:
1)数据库安装了connection_control插件。
2)数据库设置了符合安全性要求的connection_control_failed_connections_threshold及connection_control_min_connection_delay参数
3)数据库设置了符合安全性要求的connect timeout.interactive_timeout、wait timeout参数。
结果记录:
1、描述MySQL数据库是否安装了登录失败处理模块。
备注:
interactive_timeout及wait_timeout分别控制交互式客户端、非交互式客户端的空闲会话超时。
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
应核查是否采用加密等安全方式对系统进行远程管理,防止鉴别信息在网络传输过程中被窃听。
MySQL数据库默认符合。
结果记录:
1、MySQL数据库默认符合。描述为:MYSQL采取了加密方式进行远程管理,保证了鉴别信息传输过程无法被窃听。
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
|1)应核查是否采用动态口令、数字证书、生物技术和设备指纹等两种或两种以上组合的鉴别技术对用户身份进行鉴别;
数据库系统采用动态口令、数字证书、生物技术和设备指纹等两种或两种以上组合的鉴别技术对用户身份进行鉴别;
2)应核查其中一种鉴别技术是否使用密码技术来实现。
其中一种鉴别技术使用密码技术来实现。
对于数据库基本不符合
结果记录:
1、描述数据库采用的鉴别技术,是否包含了两种或两种以上的组合。
2、描述其中一项鉴别技术是否使用密码技术。
访问控制
- 应对登录的用户分配账户和权限;
1)应核查是否为用户分配了账户和权限及相关设置情况;
1)
a)询问数据库管理员是否建立帐户权限表,是否限制了应用连接帐户的访问权限;(询问)
b)在数据库中依次输入
SELECT*FROM mysql.user;
SELECT *FROM mysql.db;
SELECT *FROM mysql.tables_priv;
SELECT *FROM mysql.columns_priv;
查看各帐户的权限是否与权限表一致。
2)应核查是否已禁用或限制匿名、默认账户的访问权限。
2)核查数据库是否禁用或限制默认帐户root的权限。
推荐值:
1)
a)数据库管理员已建立帐户权限表,并限制了应用连接帐户的访问权限;
b)设置的帐户权限与权限表一致。
2)数据库已禁用或限制默认帐户root的权限。
结果记录:
1、描述数据库管理员是否建立帐户权限表,是否限制了应用连接账户的访问权限;
2、描述各账户权限是否与权限表一致;
3、描述是否禁用或限制默认账户root的权限。
b)应重命名或删除默认账户,修改默认账户的默认口令;
1)应核查是否已经重命名默认帐户或默认帐户已被删除;
select user,host FROM mysql.user;
核查是否已经重命名或删除默认帐户root;
2)应核查是否已修改默认帐户的默认口令。
MySQL数据库默认符合。
推荐值:
1)已经重命名或删除默认帐户root;
2)MySQL数据库默认符合。
结果记录:
1、描述默认账户root是否已重命名或被删除;
2、描述默认账户是否已修改了默认口令。
备注:
1) MySQL 5.6及以下的root帐户与系统表、系统视图的相关性强,原则上不得重命名root帐户。
2) MySQL 5.7.7及以上新增sys schema,将root帐户与系统表、系统视图的从属关系进行分离,故可实现root帐户的重命名。
3) sys schema的属主为新增帐户mysql.sys,mysql.session帐户用于会话管理,MySQL 8.0及以上进一步新增系统帐户mysql.infoschema。以上系统帐户均为锁定状态,且不得修改属性,否则将导致数据库无法正常运行。
c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
- 应核查是否不存在多余或过期帐户,管理员用户与帐户之间是否——对应;
select user,host,authentication_string,password_lifetime,account_locked from mysql.user;
该mysql 没有 password_lifetime数据库
询问数据库管理员,是否删除了多余或过期的帐户,管理员用户与帐户之间是否——对应;
2)在数据库中输入
SELECT*FROM mysql.user;
核查多余的、过期的帐户是否已被删除或停用。
应测试验证多余的、过期的帐户是否被删除或停用。
推荐值:
1)数据库不存在多余或过期的帐户,管理员用户与帐户之间——对应;
2)数据库中多余的、过期的帐户被删除或停用。
结果记录:
1、描述数据库是否存在多余或过期账户;
2、描述管理员用户与账户之间是否一一对应。
d)应授予管理用户所需的最小权限,实现管理用户的权限分离;
1)应核查是否进行角色划分;
根据帐户权限表,询问并检查是否对数据库连接帐户进行角色划分。
通过输入
select * from mysql.user
如除root外,任何用户不应该有mysql库user表的存取权限,禁止将fil、process、 super权限授予管理员以外的账户
2)应核查管理用户的权限是否已进行分离;
根据帐户权限表,询问并检查是否对数据库管理帐户进行权限分离,划分了用户管理员、配置管理员、安全审计员等角色。
查看用户权限表,并验证用户是否具有自身角色外的其他用户的权限。
输入select * from mysql.user where user="用户名";
select * from mysql.user where user='root';
3)应核查管理用户权限是否为其工作任务所需的最小权限。
在数据库中依次输入
SELECT*FROM mysql.user;
SELECT*FROM mysql.db;
SELECT *FROM mysql.columns_priv;
SELECT *FROM mysql.tables_priv;
查看分配的角色是否和安全策略一致。
推荐值:
1)数据库设置了独立的安全管理员帐户,并对其分配了安全管理权限。
2)数据库各帐户分配的权限和帐户权限表及安全策略一致。