一、Mysql5.7的配置文件my.ini配置示例

[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置mysql端口号,调整为非默认端口3306
port = 3807
#设置为mysql的程序安装目录
basedir="C:\Program Files\MySQL\MySQL Server 5.7\"
#设置mysql数据库的数据的存放目录
datadir="D:\ProgramData\MySQL\MySQL Server 5.7\data\"
#允许最大连接数
max_connections=500
#服务端使用的字符集utf8
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#服务器内存32G时,可以设置为2G,服务器内存16G时,可以设置为1G
innodb_buffer_pool_size=2G
#开启binlog日志记录
log-bin=mysql-bin
#mysql5.7.3及以后版本开启binlog日志,server-id设置为2位年月日
server-id=220915
#mysql5.7及以上版本,使用SQL_MODE来启用严格模式,以确保数据的完整性和一致性
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#字符串连接函数不限制大小,mysql5.7中配置为-1已经不生效了,需要配置成具体的值,18446744073709551615是理论最大值
#group_concat_max_len=-1
group_concat_max_len = 18446744073709551615
#mysql开启自定义函数信任,mysql开启binlog时,当还原含有自定义函要开启该功能
log_bin_trust_function_creators=1
#设置mysql的event为启用状态,使用时设置
#event_scheduler=ON  
#还原数据库时,一个语句最大大小配置insert into tablename values(......)
max_allowed_packet=32M
#当mysql引擎为innodb时,锁表等待时间调整为300秒,默认为50秒
innodb_lock_wait_timeout=300
#跳过密码验证
#skip-grant-tables

#登录连接的超时时间
wait_timeout= 1200
#客户端超过300秒没有新的查询请求,则自动断开与客户端的链接,控制长时间空闲链接的数据
interactive_timeout=300
#设置在等待获取某个锁的最长时间为300秒,超过时MySQL服务器将自动放弃等待并返回错误信息,用于避免长时间的锁等待
lock_wait_timeout=300
#stop slave后,超过300秒未收到主服务的停止信息,还继续复制日志,默认情况下rpl_stop_slave_timeout的值为31536000秒(即1年)
#rpl_stop_slave_timeout=300

#表示不允许使用select ... into outfile和load data [local]infile来进行数据导入导出操作
local-infile=0
#禁用符号链接,数据只能存储在datadir目录中,mysql5.5.8及以上版本设置为0
symbolic-links=0

#加载身份鉴别:密码复杂性验证插件
plugin-load-add=validate_password.dll
#服务器在启动时加载如上插件,并防止在服务器运行期间删除该插件
validate-password=FORCE_PLUS_PERMANENT
#保证用户密码的长度
validate_password_length=8
#密码中数字的数量
validate_password_number_count=1
#密码中大小写字母字符的数量
validate_password_mixed_case_count=1
#密码中特殊字符的数量
validate_password_special_char_count=1
#至少 90 天更换一次口令
#default_password_lifetime = 90

#加载日志审计功能插件
plugin-load-add=server_audit.dll
#服务器在启动时加载如上插件,并防止在服务器运行期间删除该插件
server_audit=FORCE_PLUS_PERMANENT
#开启审计日志功能
server_audit_logging=on
#审计日志默认存放路径可以不写,默认到data文件下
#server_audit_file_path="D:/ProgramData/MySQL/MySQL Server 5.7/data/audit.log"
#设置审计日志文件大小 默认1000000,1073741824=1GB
server_audit_file_rotate_size=1073741824
#审计日志存放个数(到达该最大个数后循环删除)
server_audit_file_rotations=20

#开启mysql调试日志
#general_log = 1
#设置mysql调试日志存放位置
#general_log_file="D:/ProgramData/MySQL/MySQL Server 5.7/data/general.log"

[mysqld_safe]
log_error="D:/ProgramData/MySQL/MySQL Server 5.7/data/log.txt"

二、相关插件

开启身份鉴别、审计日志时需要相应的插件,需要将对应的插件上传到Mysql的“C:\Program Files\MySQL\MySQL Server 5.7\lib\plugin”目录下

身份鉴别插件:validate_password.dll

审计日志插件:server_audit.dll

Mysql5.7对应的插件下载:

 

三、审计日志设置项说明

server_audit_output_type:指定日志输出类型,可为SYSLOG或FILE
server_audit_logging:启动或关闭审计
server_audit_events:指定记录事件的类型,可以用逗号分隔的多个值(connect,query,table),如果开启了查询缓存(query cache),查询直接从查询缓存返回数据,将没有table记录
server_audit_file_path:如server_audit_output_type为FILE,使用该变量设置存储日志的文件,可以指定目录,默认存放在数据目录的server_audit.log文件中
server_audit_file_rotate_size:限制日志文件的大小
server_audit_file_rotations:指定日志文件的数量,如果为0日志将从不轮转
server_audit_file_rotate_now:强制日志文件轮转
server_audit_incl_users:指定哪些用户的活动将记录,connect将不受此变量影响,该变量比server_audit_excl_users优先级高
server_audit_syslog_facility:默认为LOG_USER,指定facility
server_audit_syslog_ident:设置ident,作为每个syslog记录的一部分
server_audit_syslog_info:指定的info字符串将添加到syslog记录
server_audit_syslog_priority:定义记录日志的syslogd priority
server_audit_excl_users:该列表的用户行为将不记录,connect将不受该设置影响
server_audit_mode:标识版本,用于开发测试

重点说明 server_audit_events

省略值全部事件类型都会记录到审计日志中,可选择事件类型才记录。

如 server_audit_events = query,table,query_ddl,query_dml

事件类型

CONNECT:连接、断开连接和失败的连接,包括错误代码

QUERY:以纯文本形式执行的查询及其结果,包括由于语法或权限错误而失败的查询

TABLE:受查询执行影响的表

QUERY_DDL:与QUERY相同,但只筛选DDL类型的查询(create、alter、drop、rename和truncate语句,create/drop[procedure/function/user]和rename user除外(它们不是DDL)

QUERY_DML:与QUERY相同,但只筛选DML类型的查询(do、call、load data/xml、delete、insert、select、update、handler和replace语句)

QUERY_DCL:与QUERY相同,但只筛选DCL类型的查询(create user、drop user、rename user、grant、revoke和set password语句)

QUERY_DML_NO_SELECT:与QUERY_DML相同,但不记录SELECT查询。(从1.4.4版开始)(do、call、load data/xml、delete、insert、update、handler和replace语句)

注意

1. 如果开启了查询缓存(query cache),查询直接从查询缓存返回数据,将没有table记录

2. 由于除了DDL和DML之外还有其他类型的查询,因此将查询DDL和查询DML选项一起使用并不等同于使用查询。从Audit插件的1.3.0版开始,有用于记录查询的DCL类型(例如GRANT和REVOKE语句)的QUERY_DCL选项。在同一版本中,添加了server_audit_query_log_limit变量,以便能够设置日志记录的长度。以前,由于查询字符串较长,日志条目将被截断。