《23-01-MySQL30years.pdf》由会员分享,可在线阅读,更多相关《23-01-MySQL30years.pdf(48页珍藏版)》请在三个皮匠报告上搜索。
1、Sakila 30而立!打造坚不可摧的MySQL徐轶韬MySQL首席解決方案工程师Oracle LLC.MySQL 创新30年3OracleSunMySQL AB19952000200520102015200820202023202420251.以強大的盔甲抵挡攻击2.跌落时有安全网保护安全保障来自两方面Copyright 2025,Oracle and/or its affiliates4Copyright 2025,Oracle and/or its affiliates4遵循基本的安全准则(https:/ root 账户除外)获取 mysql 系統数据库中的 user 表!了解 MySQ
2、L 访问许可权限系统的工作原理不要在数据库中储存明文密码假設所有密码都将使用已知密码清单进行自动破解使用防火墙MySQL 的应用程序不应信任用户输入的任何数据重要数据加密以validate_password component 強化密码编码策略(https:/ 2025,Oracle and/or its affiliates5登录认证6Copyright 2024,Oracle and/or its affiliates在 MySQL 中,账户由三个元素构成:oUsername空白用户视为匿名oHost,运行 MySQL 客户端Used transparently by the client
3、/connectorMay use IP or FQDNs or domains with wildcards(e.g.%means every host)oPasswordMySQL 8 默认的插件 caching_sha2_passwordMySQL 5.X 格式mysql_native_password(它使用 NIST 不再推荐的 SHA1 算法)在同一实例中,使用者可能具有不同的密码插件可以使用变量 default_authentication_plugin 指定密码插件例:CREATE USER username1%IDENTIFIED BY;CREATE USER IDENTIF
4、IED BY;CREATE USER username3192.168.1.1 IDENTIFIED BY;CREATE USER%IDENTIFIED BY;CREATE USER username4localhost IDENTIFIED WITH mysql_native_password BY;MySQL User Accountshttps:/ 2024,Oracle and/or its affiliates检查密码的的可靠性并防止使用弱密码它使用与配置活自定义的策略(validate_password_policy variable)o低:长度o中:长度、小写/大写和特殊字符o強
5、:長度、小写/大写和特殊字符变量:ovalidate_password_lengthlengthovalidate_password_mixed_casemixed_case_count,validate_password_numbernumber_count,validate_password_special_charspecial_char_countovalidate_password_dictionary_filedictionary_fileovalidate_password.changed_characters_percentagechanged_characters_perce
6、ntageovalidate_password.check_user_namecheck_user_name例mysql SET PASSWORD=abc;ERROR 1819(HY000):Your password does not satisfy the current policyPassword Validation ComponentPassword Validation Component8Copyright 2024,Oracle and/or its affiliates密码期限o要求定期更改密码密码重复使用限制o防止再次选择旧密码密码验证o要求更改密码,还要指定要替换的当前
7、密码双重密码o使客戶端能夠使用主密码或辅助密码进行连接密码強度評估o要求使用強密码。使用密码验证元件实现随机密码生成o要求显式管理員指定的文本密码的替代方法密码失败追踪o在连续多次密码错误登录失败后启用临时账户锁定其他密码管理9Copyright 2024,Oracle and/or its affiliates抵御暴力攻击o在连续尝试一定数量的失败连接后,伺服器对用戶端的回应会逐渐增加延迟CONNECTION_CONTROL 插件o检查传入连接,并根据需要向伺服器回应添加延迟CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS 插件o建立一个 INFORMATIO
8、N_SCHEMA 表,该表提供失败连接尝试的更詳细监控信息Connection Control Plugin10Copyright 2024,Oracle and/or its affiliates企业级安全还还需要需要什什么么?Copyright 2025,Oracle and/or its affiliates11Copyright 2025,Oracle and/or its affiliatesMySQL企业版-MySQL的防护罩12管理工具高级功能技术支持可扩展性高可用性验证审计加密+TDE防火墙数据屏蔽监视备份开发管理数据迁移技术支持Oracle认证13MySQL 企业版的价值监视
9、、诊断,合规Oracle Enterprise Manager for MySQL监视监视监视状态与性能查询分析识别慢查询自动告警自定义扩展度量事件管理通知:Email,SNMP traps,Webhooks,Slack集成:ServiceNow,MS SCOM,PagerDuty,Jira合规合规遵从标准,以评估MySQL配置和安全最佳实践合规仪表板监控MySQL整体的合规得分和违规行为15Oracle Enterprise Manager for MySQL 性能监视 高可用性监视 复制监视 InnoDB监视 企业版防火墙监视 企业版审计监视 MySQL度量集合 MySQL告警通知 MyS
10、QL配置管理 MySQL报告 MySQL远程监视MySQL企业遥测允许用户定义、创建和收集来自MySQL的遥测数据,以从各种可观察性和管理工具监控MySQL的性能和行为。MySQL使用CNCF OpenTelemetry可观察性框架(一个供应商中立的标准,包括通用库、协议和工具)提供遥测数据,如跟踪和度量MySQL Enterprise TelemetryOpenTelemetry指标为MySQL企业用户如下优势:可量化的性能测量:指标精确测量各种数据库性能。允许用户评估和鉴别优化的瓶颈。详细的见解:指标可以捕获广泛的数据点,包括数据库连接计数、查询执行时间、缓存命中率等等。主动监控:通过不断
11、收集和分析指标,用户可以在潜在问题影响用户体验之前,主动识别潜在问题。趋势分析:随着时间的推移,指标数据可以用来识别趋势和模式。这允许用户预测未来的资源需求并使数据驱动关于数据库扩展或优化的决策。与跟踪数据的相关性:当与跟踪数据、度量标准结合使用时,提供数据库行为的整体视图。用户可以关联特定的指标使用跟踪数据查明性能问题的根本原因或识别查询消耗的资源。MySQL Enterprise Telemetry数据库迁移 支持 Microsoft SQL Server,PostgreSQL,Sybase ASE,Sybase SQL Anywhere,SQLite,Microsoft Access,等
12、等管理迁移项目选择源和目标数据库对象迁移数据迁移MySQL 版本升级MySQL Workbench EEDatabase Migration Wizardfor SQL Server,Sybase,SQLite,SQL Anywhere&for SQL Server,Sybase,SQLite,SQL Anywhere&PostgreSQLPostgreSQL快速和方便地访问审计事件索引搜索 事件类型 用户账户 日期范围 文本匹配MySQL Workbench EE与审计插件集成使用建立和管理备份任务 建立新的备份任务 计划自动备份任务 查看当前备份任务 查看最近的备份任务恢复备份 全量、部分
13、、增量 MySQL Workbench EE与备份功能集成使用MySQL Thread PoolServer:2 Sockets,48cores,96 threads Intel(R)Xeon(R)Platinum 8268 CPU 2.90GHzRAM:192GBStorage:NVMe Optane 2 x 375GBOS:OL7.9 UEK6MySQL:v8.0.31 OpenSSL-1.1.1Client:2 Sockets,44cores,88 threads Intel(R)Xeon(R)CPU E5-2699 v4 2.20GHz线程池提供了一个高度可伸缩的线程处理模型,可以减少
14、管理客户端连接和语句执行线程的开销。MySQL 加密函数库 对称加密AES256 公钥/非对称加密密钥管理 生成公钥和密钥 密钥交换方法:RSA,DSA,DH签名和验证数据 使用散列加密进行签名,验证和校验MySQL Enterprise Encryption增强安全性 添加层 强化访问控制 易于使用和管理满足安全性和监管需求 适合需要加密的情景 健康管理,财务服务,政府等等。保护和管理密钥 支持标准KMIP 1.2协议 支持Oracle密钥库和其他密钥存储库MySQL Enterprise Transparent Data EncryptionKey Vault2 层架构MySQL Ente
15、rprise Transparent Data EncryptionMySQL DatabaseTablespace KeysMySQLServerPlugin&Services InfrastructureInnoDBClientKeyringpluginsMaster Key 保存在数据库之外 Oracle Key Vault 兼容KMIP 1.2 密钥库Tablesapce Key 由master key进行保护Master KeyPlain TextEncrypted 2Encrypted 1MySQL Enterprise Transparent Data Encryption“co
16、mponent_keyring_file”组件,基于文件作为密钥。“component_keyring_encrypted_file”组件,基于加密文件作为密钥。“keyring_okv”插件符合KMIP 1.1协议兼容产品如下:Oracle Key VaultGemalto SafeNet KeySecure ApplianceTownsend Alliance Key ManagerEntrust KeyControl“keyring_aws插件,用于 Amazon Web Services Key Management Service(AWS KMS)。“keyring_hashicor
17、p”插件,使用 HashiCorp Vault保管密钥。该插件支持“HashiCorp Vault AppRole”身份验证。密钥信息不会永久存储在MySQL服务器的本地存储。“component_keyring_oci”组件,使用“Oracle Cloud Infrastructure Vault”保存密钥。确保二进制日志和中继日志已加密“binlog_encryption”系统变量可用于配置二进制日志和中继日志的加密。即便二进制日志未启用,也可以将其配置为 ON 以对中继日志文件进行加密。确认方法:使用以下语句检查是否启用加密:SELECT VARIABLE_NAME,VARIABLE_V
18、ALUE,BINLOG-At Rest Encryption as NoteFROM performance_schema.global_variables where variable_name=binlog_encryption;建议:运行以下语句启用加密:SET GLOBAL binlog_encryption=ON;采用 MySQL Enterprise Transparent Data Encryption(TDE),它包含了对任何 MySQL 加密数据文件(包括二进制和中继日志文件)的静态加密支持。开箱即用的日志用来记录连接、登录和查询简单的细粒度策略用于过滤和日志轮询动态地启用和
19、禁用:无需重启服务基于XML的审计流 将数据发送给远程服务器/审计数据保险库 Oracle Audit Vault Splunk,等等.27MySQL Enterprise AuditMySQL 应用追加的额外法规(HIPAA,Sarbanes-Oxley,PCI,etc.)确保所有事件都经过审计过滤器定义了所有需写入审计日志的事件。必须将此用于记录所有事件且绑定给所有用户的过滤器设置好,以确保所有事件信息都被写入审计日志。确认方法:使用以下语句检查全部的过滤器:SELECT*FROM mysql.audit_log_filter;必须返回过滤器的名称及记录全部事件。+-+-+|NAME|FI
20、LTER|+-+-+|log_all|filter:log:true|+-+-+检查用户与过滤器的绑定:SELECT*FROM mysql.audit_log_user;确保记录全部+-+-+-+|USER|HOST|FILTERNAME|+-+-+-+|%|log_all|+-+-+-+建议:创建过滤器:SELECT audit_log_filter_set_filter(log_all,filter:log:true );应用于全部登录:SELECT audit_log_filter_set_user(%,log_all);确保审计插件无法卸载如果有人能够卸载该插件,那么就有可能在不将审计
21、事件记录到审计日志的情况下对数据库执行操作。如果审计日志插件能够被卸载,那么审计日志就可以暂时或永久地被禁用。确认方法:使用以下语句检查全部的过滤器:SELECT LOAD_OPTION FROM information_schema.plugins WHEREPLUGIN_NAME=audit_log;必须返回值为“FORCE_PLUS_PERMANENT”建议:要解决此设置问题,请按照以下步骤操作:1.打开 MySQL 配置文件(f)2.确保在 mysqld 部分中能找到以下这一行内容audit_log=FORCE_PLUS_PERMANENTPAM(Pluggable Authentic
22、ation Modules)访问外部的身份验证方法 标准接口(Unix,LDAP,Kerberos,其他)代理和非代理用户Windows 访问Window原生服务 用户已经登录到Windows进行身份验证(Windows Active Directory)可插拔的身份验证APIMySQL Enterprise Authentication将MySQL与现有安全基础设施和标准操作流程集成实时保护 查询分析和匹配白名单阻止 SQL 注入攻击 正面安全模型阻止可疑流量 删除和阻止违规事务处理自学习白名单 在每个用户的基础上自动创建获批的SQL命令列表透明化 应用程序无需更改MySQL Enterpr
23、ise FirewallMySQL Enterprise Firewall monitoring使用正面安全模式防止SQL注入攻击MySQL Enterprise Firewall 删除和阻止违规数据事务处理 记录、分析Select*from employee where id=22Select*from employee where id=22Select*from employee where id=22 or 1=1Select*from employee where id=22 or 1=1Block&LogBlock&LogAllow&LogAllow&LogWhite ListWh
24、ite ListApplicationsApplications防火墙的组成防火墙功能由三个插件提供功能,分别是MYSQL_FIREWALL、MYSQL_FIREWALL_USERS,及MYSQL_FIREWALL_WHRITELIST,它们包含在“firewall.so”中,该文件保存在“lib/plugin”路径下面。三个插件分别用于校验缓存中的SQL语句,及实现包含缓存信息的INFROMATION_SCHEMA中的表。此外,防火墙功能还包含一系列组件:“sp_set_firewall_mode()”存储过程用于设定防火墙的模式。mysql系统库中还包含“firewall_users”表,
25、及“firewall_whitelist”表,用于保存注册用户及SQL语句的白名单。内部使用的函数,包括“set_firewall_mode()”、“normalize_statement()”、“read_firewall_whitelist()”,“read_firewall_users()”。防火墙的安装及使用安装安装防火墙时,根据操作系统的不同,选择安装脚本“linux_install_firewall.sql”或“win_install_firewall.sql”。安装脚本将进行安装防火墙插件、创建配置防火墙的存储过程及系统表等工作。注册用户注册一个用户并设置它的初始防火墙模式。用户
26、的格式为完整的“userhost”,防火墙的初始模式包含“OFF”,及“RECORDING”。通过调用存储过程来设置:CALL mysql.sp_set_friewall_mode(userhost,OFF)训练防火墙使用“RECORDING”模式注册用户防火墙为每个注册用户创建规范化的摘要语句,并将其缓存切换防火墙的模式为“PROTECTING”或“OFF”保存白名单。注意,如果在“RECORDING”模式下重启mysql服务器,重启后防火墙将不会保存任何白名单内容,因此需要切换为“PROTECTING”或“OFF”保存白名单的内容。当用户希望再次修改白名单的内容时,需要将模式改为“RECO
27、RDING”,此时白名单中之前的内容不会消失。防火墙的管理开启/关闭防火墙开启/关闭防火墙通过调用存储过程“sp_set_firewall_mode”实现,例如:CALL mysql.sp_set_firewall_mode(userhost,PROTECTING)CALL mysql.sp_set_firewall_mode(userhost,OFF)监视防火墙防火墙的使用状态可以通过状态变量进行监测,状态变量包括“Firewall_access_denied”、“Firewall_access_granted”、“Firewall_access_suspicious”,及“Firewall
28、_cached_entries”。通过执行“SHOW GLOBAL STATUS LIKE Firewall%;”语句可以观察到,拒绝执行的SQL语句数量等状态。例如:mysql SHOW GLOBAL STATUS LIKE Firewall%;+-+-+|Variable_name|Value|+-+-+|Firewall_access_denied|3|Firewall_access_granted|4|Firewall_access_suspicious|1|Firewall_cached_entries|4|+-+-+数据屏蔽与脱敏 字符串屏蔽 基于字典的置换 特定屏蔽 支付卡:St
29、rict/RelaxedMySQL 数据屏蔽与脱敏随机生成数据 范围内随机生成 Email 支付卡(兼容Luhn 检查算法)基于字典生成MySQL 高可用及InnoDBCluster-採用將蛋放在多个篮子的策略,问题是如何确保所有篮子中都有同样的蛋?MySQL高可用为应用程序提供安全网Copyright 2025,Oracle and/or its affiliates38 MySQL Replication MySQL InnoDB Cluster MySQL Carrier Grade Edition 非共享架构39扩展High Performance易用Built-in HA整体解决方案
30、Everything IntegratedMySQLInnoDBclusterMySQL的高可用框架 MySQL Group Replication:提供 DB的扩展、自动故障转移 MySQL Router:提供应用程序连接目标的故障转移 MySQL Shell:设置群组复制的环境、设置Router40MySQL InnoDB Cluster?MySQL ConnectorApplicationMySQL RouterMySQL ConnectorApplicationMySQL RouterMySQL ShellMySQL ConnectorApplicationMySQL RouterMy
31、SQL ConnectorApplicationMySQL RouterMySQLInnoDBclusterMySQL Enterprise Monitormysql-js cluster.status()clusterName:“NewAppCluster,defaultReplicaSet:status:Cluster tolerant to up to ONE failure.,topology:“hanode1:3306:address:“hanode1:3306,status:ONLINE,role:HA,mode:R/W,MySQL InnoDB Cluster:整体架构客户端透明
32、连接路由 负载均衡 应用连接的固障移转无状态的设计使客户端的高可用得以简化 本地的路由器成为应用技术堆栈的一部份”MySQL Router 能够在不影响现有应用的前提下,将单独的MySQL实例轻易地迁移到具有高可用性的InnoDB分布式集群!”42MySQL RouterApp Servers withMySQL RouterMySQL Group ReplicationMySQL ShellSetup,Manage,Orchestrate43MySQL ShellApp Servers withMySQL RouterMySQL Group ReplicationMySQL ShellSet
33、up,Manage,Orchestrate 多语言:JavaScript,Python,SQL支持编写脚本 支持文档存储和关系型数据库 完整的开发和管理 APImysql-js dba.help()通过全局对象 dba使用MySQL管理接口执行DBA的操作 管理 MySQL InnoDB clusters 创建集群 部署MySQL实例 获取集群信息 启动/停止MySQL实例 验证MySQL实例MySQL Shell:管理APIApp Servers withMySQL RouterMySQL Group ReplicationMySQL ShellSetup,Manage,Orchestrat
34、e部署InnoDB Cluster RouterP PS SS SR/WR/OR/OS SS SP PMySQL RouterR/OR/OR/WStrategy:Round-robinStrategy:Round-robinMySQL RouterApplicationMySQL RouterApplication.Strategy:Round-robinbind_address:127.0.0.1bind_address:127.0.0.1MySQL RouterStrategy:Round-robinApplicationApplication.644764476447644664466446InnoDB Cluster 跨数据中心部署两个InnoDB Cluster 跨数据中心部署主集群备用集群Q&A48Copyright 2025 Oracle and/or its affiliates