MySQL的安全性和合规性 MikeFrank,MySQL产品管理总监|Oracle 版权所有©2024Oracle和/或其关联公司。 议程 •合规概述•如何示例•架构审查•最新增强功能•安全指南•MySQL安全部署指南•MySQL8.0EE的CIS基准•DISASTIG•资源•请告诉我们您需要什么 版权所有©2024Oracle和/或其关联公司。 安全是工作#1 数据是最有价值的资产 “确保组织安全(网络安全/网络弹性/GDPR合规性/数据保护合规性)” Was #1-安全-2019年 Still #1-安全 与支出持平增加云 几乎所有的违规行为-都是可以预防的。 全球合作伙伴峰会-2019年慕尼黑 数据安全和隐私法规Prolilating NCUA FS-ISAC CCPAFFIEC PIPEDAFOIPPA HIPAACIP 欧盟GDPRRuDPA CNGDPLJpAPPI 50状态 数据隐私 爱国者法案GLBANYDFS500MaDPA 在PDPB中香港PDPO 巴塞尔III Laws 多德·弗兰克 MxPDPL PCIThPDA CoDPL BrGDPL SaECTA SiPDPA AuAPP ClPPLNzPA ArPDPL 数据泄露-不断增加 2021年是数据泄露创纪录的一年 制造业和公用事业公司有48个妥协,共有4 8,294,629名受害者。 2021年有1,291次违 规,而2020年有1,1 08次违规 医疗保健部门78个妥协,超过700万受害者。 https://www.securitymagazine.com/articles/96667-the-top-data-blacks-of-2021 法规要求这些安全措施 *评估 查找风险和漏洞,确保必要的安全控制 *防止 使用密码学、用户控制、访问控制等 *检测 仍然存在违规的可能性-因此审核,监控,警报 *恢复 ¡确保在安全事件导致的服务中断中不受到影响¡即使primary数据库出现故障¡法医分析-事后审查-修复漏洞 身份验证 授权 加密 防火墙Auditing 遮蔽/去识别 MySQL安全性概述 MySQL安全性 https://www.mysql.com/products/Enterprise/ 企业安全体系结构 ◾企业 ◾企业身份验证 •SSO-LDAP、AD、PAM、本地Kerberos、FIDO2、WebAuthn、MFA ◾访问控制 遮蔽和去识别 •Masking •Substitute/Subset •随机格式化数据 •黑名单数据 用户◾网络加密 ◾强身份验证 ◾防火墙◾◾企业监视器 ◾线程池 •攻击最小化 ◾企业审计 •强大的规则引擎 ◾AuditVault •加密 ◾企业备份 ◾HA ◾KeyVault •保护密钥(KMIP、RestAPI) ◾数据加密 •TDE •Encryption •PKI ◾评估 ◾防止 ◾检测 ◾恢复 8 •Innodb群集 如何举例 可以使用SQL和... 1.DBA不需要SSH/登录到运行mysql的操作系统 这很常见。 2.必须对所有DBA操作进行审核 MySQL审计可以通过SQL捕获DBA执行的所有语句。 3.操作系统管理员不需要接触MySQL操作系统审核应显示超过初始安装的一点未暴露的命令 4.DevOps友好-面向服务 5.伟大的可重复的评估和修复自动化。 第一件事 保护Root密码 您是否键入了初始root密码 取决于安装包WindowsInstaller和DEB包提示RPM不 在不立即重置root密码 阅读安装后说明 重置“root”密码 $mysql-uroot--password='sudocat/root/.mysql_secret|cut-c87-' SQL>选择1 必须失败与“您必须设置密码” SQL>ALTERUSEroRot@localhoIsDtENTIFIEDB'<Yauth_string';> SQL>EXIT; $mysql-uroot--密码 在提示符下输入您的新密码SQL>EXIT; 多个根? 选择用户,主机从mysql.user,其中user='root'和主机<>'localhost'; 多个根帐户! 主机名是受约束的还是全局的-'%' 删除和“全局”主机根目录。如果需要远程访问,则限制访问。请注意,只有root@localhost的密码已更改! 密码策略是否到位? 部件安装了吗? SELECTcomponent_urn,“已安装密码策略组件?”作为注释 , 如果(count(component_urn)>0,'YES','NO')作为答案从mysql.component 其中component_urn='file://component_validate_password'按component_urn分组; 密码策略 SELECT变量名,变量值FROM性能模式下的全局变量WHERE变量名LIKE'valid%password%'OR变量名='default_password_lifetime'; 更改我的密码策略 如果需要 INSTALLCOMPONENT'文件://component _validate_password'; 设置密码策略 setpersistvalidate_password.check_user_name='ON'; setpersistvalidate_password.dictionary_file='<字典文件的文件名'; setpersistvalidate_password.length=15;setpersistvalidate_password.mixed_case _count=1; setpersistvalidate_password.special_char_count=2; 设置并验证`validate_password.number_count=2`;设置并验证`validate_password.policy='STRONG'`;设置并验证`password_history=5`;设置并验证`password_reuse_interval=365`;设置全局`default_password_lifetime=180` 。 此外,也许密码重置 setpersistpassword_require_current=YES请注意,有些事情可以设置每个帐户。ALTER用户'jeffrey'@'localhost' 密码历史记录5 密码重复使用间隔365天; ALTER用户'jeffrey'@'localhost'密码到期间隔90天; 18 MySQL连➓控制 处理与暴力攻击相关的失败登录尝试 连➓控制插件是否到位? 从INFORMATION_SCHEMA.PLUGINS中选择PLUGIN_NAME、PLUGIN_STATUS,其中PLUGIN_NAME像“连➓%”; 检查设置 选择@@connection_control_failed_connections_threshold、@@connection_control_min_connection_delay、 @@connection_control_max_connection_delay, @@connection_control_failed_connections_threshold; 安装和设置连➓控件 安装和设置 安装插件CONNECTION_CONTROL,源名称为'connection_control.so';安装插件CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS,源名称为'connection_control.so'; 例如 SETPERSISTconnection_control_failed_connections_threshold=4; connection_control_min_connection_delay=1500; 设置保存 https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/connection-control-installation.html https://mysqlserverteam.com/the-connection_control-plugin-keeping-brute-force-attack-in-check/ 使用您✁CA MySQL安装程序创建自签名密钥 如果您从您✁证书颁发机构生成和替换 选择“所有SSL变量列表”作为NOTE,@@ssl_ca,@@ssl_capath ,@@ssl_cert,@@ssl_cipher, 注意:MySQL8.0.16现允许您在无需重启✁情况下更改SSL选项。为监听套➓字准备一个新✁SSL上下文,然后替换旧✁上下文。生成新✁pem文件–将它们放在正确✁位置- @@ssl_crl、@@ssl_crlpath、@@ssl_fips_mode、@@ssl_key; ALTERINSTANCERELOADTLS; 需要FIP 看看它✁否开启 SELECT变量名称,变量值,FIPS模式'as备注,IF(变量值='ON'或变量值='STRICT','✁','否')FROMperformance_schema.global_variablesWHERE变量名称='ssl_fips_mode'; ✁否需要SSL? 迫使它在全球 选择VARIABLE_NAME,VARIABLE_VALUE,“仅➴许SSL”作为注释,如果(VARIABLE_VALUE='ON','PASS','FAIL')作为CHECK_VAL 从performance_schema.global_variables WHEREVARIABLE_NAMEIN('require_secure_transport'); 强制全球加密连➓ setpersistrequire_secure_transport=ON; 使用SETPERSIST 在MySQL8.0中,DBA可以从SQL设置系统 变量SETPERSIST✁值写入mysqld-auto.cnf 仅设置保留-存储到mysqld-auto.cnf而不设置运行时值。 用于配置只能在服务器启动时设置✁只读系统变量。 使用此命令无法设置一些系统变量 Seehttps://dev.mysql.com/doc/refman/8.0/en/nonpersistible-system-variables.html 需要更加安全- 然后安装MySQL钥匙圈 =ONpersist_sensitive_variables_in_pl 设置时,服务器会加密任何敏感系统变量✁值 https://dev.mysql.com/doc/refman/8.0/en/persisted-system-variables.html#persisted-system-variables-sensitive mysqld-auto.cnf 此文件在datadir中 比my.cnf更少访问添加✁安全性 历元时间戳 跟踪更改时间 1564600430679850Mon,2019 年8月26日17:57:47GMT ➴许导入和导出操作 关闭您正在使用✁功能-减少攻击面 选择VARIABLE_NAME,VARIABLE_VALUE,'SecureFileCheck'作为备注,如果(length(VARIABLE_VALUE)>0ANDVARIABLE_VALUE!='NULL','FAIL','PASS')作为SecFileCheck 从performance_schema.global_variables其中variable_name='secure_file_priv'; 本地加载数据INFILE 默认情况下安全-OFF 检查lo