MYSQL 8 的 security 的确是和MYSQL 5.7 不大一样,但具体怎么弄到底和MYSQL 5.7 有什么不一样,还是的搞一搞。什么 还在使用MYSQL 5.6 ,5.5 ,那也可以看一眼,或许下次升级就直接跳过 5.7 呢 .
我们先一步步来
1 安全部门问:你们的MYSQL 数据库有么有数据库安全监测?
答:有的,MYSQL 8 提供了一个安全的监测程序来监测安装好的MYSQL 的一些安全问题?这个程序的名字叫 mysql_secure_installation
我们来看看他到底能做什么 ?我们在shell 中直接键入 mysql_secure_installation
这样一个程序会问你几个问题并根据你的选择来做出一些对应的动作
评判你的ROOT 密码是否符合现在的密码等级的设定,并给出分数
2 在安装MYSQL的时候,有没有一些其他的匿名用户一并被安装到数据库中,如果有就进行删除
3 判断你的ROOT 用户是否可以通过外网来进行访问,如果可以,你可以选择禁止这样的权限
4 有的MYSQL 在安装的时候,会带着一个TEST 的数据库,默认所有的用户都可以访问这个库,你是不是要做点什么
OK ,一般我们在安装完MYSQL 8 后,可以通过这个程序来将你的MYSQL 的安全强化,或者可以在你接手一个新的数据库时来验证一下你的数据库的基本安全情况。
2 问题,你的用户名密码是否有强制的保护,例如密码多少位,密码过期等设置
答:有,我们采用MYSQL 8 的安全组件(不是插件是组件)
怎么验证你安装了这个组件
如果你在MYSQL 数据库中执行完上面的语句,能看到我红色线画的内容,说明你安装了这个组件(具体咱们安装这个组件,请 B or G )
那这个MYSQL 8的组件,包含什么内容我们来list 一下
1 是否打开密码检查,默认打开
validate_password.check_user_name ON
2 密码的长度是多少
validate_password.length 默认 8
3 密码是否需要大小写混合的数量
validate_password.mixed_case_count 默认 1
4 密码中含有数字的最小数量
validate_password.number_count
默认 1
5 密码中的特殊字符,(非字母和数字)
validate_password.special_char_count
默认 1
5 密码策略的设置
密码的策略设置中是有高中低的设置,匹配的值也是 0 1 2
validate_password.policy
默认2
而这个设置直接关系到你上面的设置是否能生效和怎么生效
选择 0 则仅仅对密码的长度进行检验
选择 1 对密码的长度,是否有数字,是否有大小写,是否有特殊字符都有监测
选择 2 则在1 的基础上,还对你设置的字典文件进行比对,如果和字典文件的禁止设置为密码的条目对应,则你的密码就不能进行设置
具体你想怎么设置就看你公司的安全部门对密码的要求。
注:同时请注意,如果以前使用PT 工具对账号进行复制的方式,在MYSQL 8上应该暂时会报错,因为密码的加密方式已经变化了,工具无法进行工作。
至于MYSQL5.7 上有的用户账号的过期时间,或生存时间也都和以前没有变化,但一般不建议设置,除非你的安全部门强调,否则别给自己找麻烦。否则大半夜给你打电话告诉你应用联不通了,那这锅就的自己背了。
3 MYSQL 的 audit 功能
现在的数据库都需要有audit的功能,没有audit 的功能的数据库在安全方面一定是要受到安全部门的 吐槽或者给你的“颜色”看看。MYSQL 怎么支持audit 功能,
1 你花钱买MYSQL 的企业版的,自带audit 功能
2 你安装的是PERCONA 的 MYSQL SERVER 的版本,他们免费提供你 AUDIT 功能
什么,免费的官版的MYSQL ,OMG , SORRY 请你 B OR G 吧,因为我一直 percona 版,官版的反正我不用。
下面都是基于 PERCONA 的 MYSQL 8.015 版本,其他的版本的MYSQL ......
这个顺便说一句为什么要PERCONA ,PERCONA 作为数据库界的“最”强大的服务公司,那支持的数据库版本和能力算是数一数二的,MONGODB 人家有自己的产品,MYSQL 有自己的产品, POSTGRESQL 11 ,现在也有免费的产品了, MYSQL的 代理软件,也有免费的产品。重要的是免费,还好用,有文档,如果有钱还可以买个支持什么的。
安装AUDIT 插件
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
查看一下你的插件是否安装上了
percona 的audit 格式支持 XML JSON CSV 等格式
例如我们要检查访问 mysql 数据库的用户
SET GLOBAL audit_log_include_databases = 'mysql';
下面两张图是相关的配置信息,和audit LOG 中的内容,具体的就不多说了,都是精英,稍微看一下就都会了。
也可以找一期,在说说这个 audit log OK 今天就到这里