1. 前言
为了安全和操作的可追溯性考虑,越来越多的公司加入了审计功能。mysql5.5推出了相关的审计功能,到5.6.20功能进一步完善,算是勉强可用了,虽然细粒度方面做的不是太好,但是后续版本还是可以期待一下的。这里主要介绍下相关的功能和特性。2. 开启审计
2.1 配置文件加载
mysql5.6中的审计是通过audit_log插件来实现的,我们可以在配置文件中加载该插件来开启。[mysqld] plugin-load=audit_log.so
如果希望数据库强制开启审计功能,如果不开启的话server不启动,或者审计功能不能进行时server挂住,加入
[mysqld] plugin-load=audit_log.so audit-log=FORCE_PLUS_PERMANENT
2.2 加载插件列表
审计功能的开启还有另外一种方式,就是在命令行中安装审计插件。确保在数据库的插件目录中存在audit_log.so。[i686数据库的插件目录默认是/usr/lib/mysql/plugin,中,也可以指定参数plugin_dir]mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
3. 参数介绍
审计参数如下:
3.1 audit_log_buffer_size
audit_log_buffer_size :审计缓存,建议设置为4096的倍数,该参数只有在audit_log_strategy为ASYNCHRONOUS时生效。3.2 audit_log_connection_policy
audit_log_connection_policy:记录了连接审计的信息。包含三个参数Value | Description |
---|---|
ALL |
Log all connection events |
ERRORS |
Log only failed connection events |
NONE |
Do not log connection events |
3.3 audit_log_current_session
audit_log_current_session:标志当前会话是否进入审计,是个只读参数,只能通过 audit_log_exclude_accounts和 audit_log_include_accounts来控制哪儿些进入会话审计。3.4 audit_log_exclude_accounts/audit_log_include_accounts
audit_log_exclude_accounts:控制哪儿些用户可以不进入审计,字符串类型,默认可以使用逗号分隔。audit_log_include_accounts:控制哪儿些用户可以进入审计,字符串类型,默认可以使用逗号分隔。
exclude和include同时只有一个参数生效。
3.5 audit_log_file
audit_log_file:可以用于控制审计日志的名称和路径。3.6 audit_log_flush
audit_log_flush:控制审计日志的归档,只有在audit_log_rotate_on_size=0的时候生效,在手工重命名审计日志归档后,可以指定audit_log_flush=1来生成新的审计日志。3.7 audit_log_format
audit_log_format:审计日志的格式,分为OLD和NEW(NEW格式在5.6.14才出现)。当更改格式的时候需要进行3个步骤:1 :关闭数据库 2:重命名当前的audit.log文件
3:更改audit_log_format参数,并重启mysql,重启后会自动生成一个新的audit.log文件
防止NEW格式和OLD格式在同一个审计日志中,会导致审计功能错误。 audit_log_policy :记录了审计日志的控制策略:
Value | Description |
---|---|
ALL |
Log all events |
LOGINS |
Log only login events |
QUERIES |
Log only query events |
NONE |
Log nothing (disable the audit stream |
3.8 audit_log_statement_policy
audit_log_statement_policy:记录了语句的审计策略,可能会被audit_log_policy给覆盖:Value | Description |
---|---|
ALL |
Log all statement events |
ERRORS |
Log only failed statement events |
NONE |
Do not log statement events |
3.9 audit_log_rotate_on_size
audit_log_rotate_on_size:审计日志的文件大小。当参数大于0的时候,当审计日志超过限制后,会自动的重命名为加时间戳后缀的日志文件。同时创建新的审计日志。3.10 audit_log_strategy
audit_log_strategy:审计日志的刷新策略分为:Value | Meaning |
---|---|
ASYNCHRONOUS |
Log asynchronously, wait for space in output buffer |
PERFORMANCE |
Log asynchronously, drop request if insufficient space in output buffer |
SEMISYNCHRONOUS |
Log synchronously, permit caching by operating system |
SYNCHRONOUS |
Log synchronously, call sync() after each request
|
4. 日志格式
审计日志格式是XML的形式,NEW要比OLD的标签详细一些。具体的标签信息如下: 实例:<!--?xml version="1.0" encoding="UTF-8"?--> <timestamp>2013-09-17T15:03:24 UTC</timestamp> <record_id>1_2013-09-17T15:03:24</record_id> <name>Audit</name> <server_id>1</server_id> <version>1</version> <startup_options>/usr/local/mysql/bin/mysqld --socket=/usr/local/mysql/mysql.sock --port=3306</startup_options> <os_version>x86_64-osx10.6</os_version> <mysql_version>5.7.2-m12-log</mysql_version> </audit_record> <timestamp>2013-09-17T15:03:40 UTC</timestamp> <record_id>2_2013-09-17T15:03:24</record_id> <name>Connect</name> <connection_id>2</connection_id> <status>0</status> <status_code>0</status_code> <user>root</user> <os_login></os_login> <host>localhost</host> <ip>127.0.0.1</ip> <command_class>connect</command_class> <priv_user>root</priv_user> <proxy_user></proxy_user> <db>test</db> </audit_record> ... <timestamp>2013-09-17T15:03:41 UTC</timestamp> <record_id>4_2013-09-17T15:03:24</record_id> <name>Query</name> <connection_id>2</connection_id> <status>0</status> <status_code>0</status_code> <user>root[root] @ localhost [127.0.0.1]</user> <os_login></os_login> <host>localhost</host> <ip>127.0.0.1</ip> <command_class>drop_table</command_class> <sqltext>DROP TABLE IF EXISTS t</sqltext> </audit_record> <timestamp>2013-09-17T15:03:41 UTC</timestamp> <record_id>5_2013-09-17T15:03:24</record_id> <name>Query</name> <connection_id>2</connection_id> <status>0</status> <status_code>0</status_code> <user>root[root] @ localhost [127.0.0.1]</user> <os_login></os_login> <host>localhost</host> <ip>127.0.0.1</ip> <command_class>create_table</command_class> <sqltext>CREATE TABLE t (i INT)</sqltext> </audit_record> ... <timestamp>2013-09-17T15:03:41 UTC</timestamp> <record_id>7_2013-09-17T15:03:24</record_id> <name>Quit</name> <connection_id>2</connection_id> <status>0</status> <status_code>0</status_code> <user></user> <os_login></os_login> <host></host> <ip></ip> <command_class>connect</command_class> </audit_record> ... <timestamp>2013-09-17T15:03:47 UTC</timestamp> <record_id>9_2013-09-17T15:03:24</record_id> <name>Shutdown</name> <connection_id>3</connection_id> <status>0</status> <status_code>0</status_code> <user>root[root] @ localhost [127.0.0.1]</user> <os_login></os_login> <host>localhost</host> <ip>127.0.0.1</ip> <command_class></command_class> </audit_record> <timestamp>2013-09-17T15:03:47 UTC</timestamp> <record_id>10_2013-09-17T15:03:24</record_id> <name>Quit</name> <connection_id>3</connection_id> <status>0</status> <status_code>0</status_code> <user></user> <os_login></os_login> <host></host> <ip></ip> <command_class>connect</command_class> </audit_record> <timestamp>2013-09-17T15:03:49 UTC</timestamp> <record_id>11_2013-09-17T15:03:24</record_id> <name>NoAudit</name> <server_id>1</server_id> </audit_record> </audit>
:文件的根标签为,并以 为结束标签
:包含一系列的必选标签和可选标签,可选标签是否出现取决于audit record类型。
以下标签audit record类型决定是否出现
5. 审计限制
审计日志默认存放在data路径下,由于XML文件没有经过加密,官网建议通过参数指定到特殊路径下,设置相应人员权限,进行安全控制。 此外审计功能有如下情况不能进行记录: 1)只有top-level(无变量定义)的语句才能进行审计,存储程序如存储过程,触发器,函数等不审计; 2)涉及到外部文件的语句无法进行审计,如load data infile。
在数据库优化中,应根据查询需求选择索引策略:1.当查询涉及多个列且条件顺序固定时,使用复合索引;2.当查询涉及多个列但条件顺序不固定时,使用多个单列索引。复合索引适用于优化多列查询,单列索引则适合单列查询。

要优化MySQL慢查询,需使用slowquerylog和performance_schema:1.启用slowquerylog并设置阈值,记录慢查询;2.利用performance_schema分析查询执行细节,找出性能瓶颈并优化。

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

MySQL异步主从复制通过binlog实现数据同步,提升读性能和高可用性。1)主服务器记录变更到binlog;2)从服务器通过I/O线程读取binlog;3)从服务器的SQL线程应用binlog同步数据。

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

MySQL的安装和基本操作包括:1.下载并安装MySQL,设置根用户密码;2.使用SQL命令创建数据库和表,如CREATEDATABASE和CREATETABLE;3.执行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.创建索引和存储过程以优化性能和实现复杂逻辑。通过这些步骤,你可以从零开始构建和管理MySQL数据库。

InnoDBBufferPool通过将数据和索引页加载到内存中来提升MySQL数据库的性能。1)数据页加载到BufferPool中,减少磁盘I/O。2)脏页被标记并定期刷新到磁盘。3)LRU算法管理数据页淘汰。4)预读机制提前加载可能需要的数据页。

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用