您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[2024 MySQL Heatwave峰会MySQL and Heatwave Summit]:MySQL 的安全性和合规性 - 发现报告

MySQL 的安全性和合规性

AI智能总结
查看更多
MySQL 的安全性和合规性

Mike Frank , MySQL 产品管理总监 | Oracle 议程 • 合规概述 • 如何示例 • 架构审查 •最新增强功能 • 安全指南 • MySQL安全部署指南 • MySQL 8.0 EE的CIS基准 • DISA STIG • 资源 • 请告诉我们您需要什么 安全是工作 # 1 数据是最有价值的资产 Was# 1 - 安全 - 2019 年 Still # 1 - 安全 与支出持平增加云“确保组织安全(网络安全 / 网络弹性 / GDPR 合规性 / 数据保护合规性) ” 几乎所有的违规行为 - 都是可以预防的。 数据安全和隐私法规Prolilating 数据泄露 - 不断增加 制造业和公用事业公司有 48 个妥协 , 共有 48, 294, 629 名受害者。 2021 年是数据泄露创纪录的一年 2021 年有 1, 291 次违规 , 而 2020 年有 1, 108 次违规 医疗保健部门 78 个妥协 , 超过 700 万受害者。 法规要求这些安全措施 * 评估 查找风险和漏洞 , 确保必要的安全控制 * 防止 使用密码学、用户控制、访问控制等 * 检测 仍然存在违规的可能性 - 因此审核 , 监控 , 警报 * 恢复 ¡确保在安全事件导致的服务中断中不受到影响¡即使primary数据库出现故障¡法医分析-事后审查-修复漏洞 如何举例 可以使用 SQL 和... 1. DBA 不需要 SSH / 登录到运行 mysql 的操作系统这很常见。 2. 必须对所有 DBA 操作进行审核MySQL 审计可以通过 SQL 捕获 DBA 执行的所有语句。 3.操作系统管理员不需要接触 MySQL操作系统审核应显示超过初始安装的一点未暴露的命令 4. DevOps 友好 - 面向服务 5.伟大的可重复的评估和修复自动化。 第一件事保护 Root 密码 您是否键入了初始 root 密码取决于安装包 Windows Installer 和 DEB 包提示 RPM 不 在不立即重置 root 密码 阅读安装后说明 重置 “root ” 密码 '<';$SQL > EXIT;必须失败与 “您必须设置密码 ”SQL>ALTER USERroot @ localhostIDENTIFIED BYauth _ string >SQL>EXIT;mysql - u root -- 密码在提示符下输入您的新密码$mysql - u root -- password = 'sudo cat / root /. mysql _ secret |cut - c 87 -'SQL>选择 1 多个根 ? 选择用户 , 主机从 mysql. user , 其中 user = 'root' 和主机 < > 'localhost';多个根帐户 ! '%'主机名是受约束的还是全局的 - 删除和 “全局 ” 主机根目录。如果需要远程访问 , 则限制访问。 请注意 , 只有 root @ localhost 的密码已更改 ! 密码策略是否到位 ?部件安装了吗 ? 从 mysql. component如果 (count (component _ urn) > 0, 'YES', 'NO') 作为答案其中 component _ urn = 'file: / / component _ validate _ password' 按 component _ urn 分组;SELECT component _ urn , “已安装密码策略组件 ? ” 作为注释, 密码策略 SELECT 变量名, 变量值 FROM 性能模式下的全局变量 WHERE 变量名 LIKE 'valid%password%' OR 变量名='default_password_lifetime'; 更改我的密码策略 设置并验证 `validate_password.number_count=2`;设置并验证 `validate_password.policy='STRONG'`;设置并验证 `password_history=5`;设置并验证 `password_reuse_interval=365`;设置全局 `default_password_lifetime=180`。 如果需要 INSTALL COMPONENT '文件: / / component_ validate _ password'; 设置密码策略 set persist validate _ password. check _ user _ name = 'ON'; 此外 , 也许密码重置 set persist password _ require _ current = YES set persist validate _ password. dictionary _ file = '< 字典文件的文件名'; 请注意 , 有些事情可以设置每个帐户。 ALTER 用户 'jeffrey' @ 'localhost' set persist validate _ password. length = 15; 密码历史记录 5 set persist validate _ password. mixed _ case_ count = 1; 密码重复使用间隔 365 天; ALTER 用户 'jeffrey' @ 'localhost' 密码到期间隔 90 天; set persist validate _ password. special _ char _count = 2; 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'; 例如 SET PERSIST connection _ 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.htmlhttps://mysqlserverteam.com/the-connection_control-plugin-keeping-brute-force-attack-in-check/ 使用您的 CA MySQL 安装程序创建自签名密钥 如果您从您的证书颁发机构生成和替换 选择 “所有 SSL 变量列表 ” 作为 NOTE, @ @ ssl _ ca, @ @ ssl _ capath, @ @ ssl _ cert, @ @ ssl _ cipher, @ @ ssl _ crl 、 @ @ ssl _ crlpath 、 @ @ ssl _ fips _ mode 、 @ @ ssl _ key ; 注意:MySQL 8.0.16 现允许您在无需重启的情况下更改 SSL 选项。为监听套接字准备一个新的 SSL 上下文,然后替换旧的上下文。生成新的 pem 文件 – 将它们放在正确的位置 - 需要 FIP 看看它是否开启 SELECT 变量名称, 变量值, FIPS 模式' as 备注, IF(变量值 = 'ON' 或 变量值 = 'STRICT', '是', '否') FROM performance_schema.global_variables WHERE 变量名称 = 'ssl_fips_mode'; 是否需要 SSL ?迫使它在全球 WHERE VARIABLE _ NAME IN ('require _ secure _ transport');选择 VARIABLE _ NAME , VARIABLE _ VALUE , “仅允许 SSL ” 作为注释 ,如果 (VARIABLE _ VALUE = 'ON', 'PASS', 'FAIL') 作为 CHECK _ VAL从 performance _ schema. global _ variables 强制全球加密连接 set persist require _ secure _ transport = ON; 侧栏 - 使用 SET PERSIST在 MySQL 8.0 中 , DBA 可以从 SQL 设置系统 变量 SET PERSIST 的值写入 mysqld - auto. cnf 仅设置保留 - 存储到 mysqld - auto. cnf 而不设置运行时值。用于配置只能在服务器启动时设置的只读系统变量。 使用此命令无法设置一些系统变量Seehttps: / / dev. mysql. com / doc / refman / 8.0 / en / nonpersistible - system -variables. html 需要更加安全 - 然后安装 MySQL 钥匙圈 设置时 , 服务器会加密任何敏感系统变量的值 侧栏 - 此文件在 datadir 中比 my. cnf 更少访问添加的安全性 历元时间戳跟踪更改时间1564600430679850 Mon , 2019年 8 月 26 日 17: 57: 47 GMT 允许导入和导出操作 关闭您正在使用的功能 - 减少攻击面 选择VARIABLE_NAME, VARIABLE_VALUE, 'Secure File Check'作为备注, 如果(length(VARIABLE_VALUE) > 0 AND VARIABLE_VALUE != 'NULL' , 'FAIL', 'PASS')作为SecFileCheck 从 performance _ schema. global _ variables其中 variable _ name = 'secure _ file _ priv'; 本地加载数据 INFILE默认情况下安全 - OFF 检查 local _ infile选择 (@ @ local _ infile, 'ON', 'OFF') 是否为 LOCAL _ LOAD _ DATA _ ALLOWED;默认情况下在 8.0 这是关闭set persist local _ infile = OFF; 谁 , 什么样的 , 他们在哪里 / 如何认证用户 内部用户内部使用 X.509 外部身份验证用户代理用户 内部用户内部认证 选择主机 , 用户 , 插件 , 如果 (插件 = 'mysql _ nat