一、概述:
MariaDB和MySQL使用广泛,如果必要记任命户访问以符合公司的审计规则,那么从前必须使用其他数据库审计解决方案。然而为了满足这一需求,MariaDB开发了MariaDB审计插件。虽然MariaDB审计插件有一些仅适用于MariaDB的独特特性,但它也可以与MySQL一起使用。MariaDB审计插件的目的是记载服务器的运动。对于每个客户端会话,它记载谁连接到服务器(即用户名和主机)、执行了哪些查询、访问了哪些表以及更改了哪些服务器变量。此信息存储在日记文件中,也可以发送到当地syslogd。 MariaDB审计插件与MariaDB、MySQL(截至5.5.34和10.0.7版本)和PerconaServer一起工作。默认环境下,MariaDB开始包括10.0.10和5.5.37版本的审计插件,并且可以安装在MariaDB 5.5.20的任何版本中。
查察插件的目次,进入目次可查察到已安装的插件
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'plugin_dir';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.02 sec)
二、安装审计插件及先容
MariaDB [(none)]> INSTALL PLUGIN server_audit
-> SONAME 'server_audit.so';
Query OK, 0 rows affected (0.14 sec)
在初次加载插件之前,服务器将不知道插件将要使用的变量(拜见设置)。如果在审计插件至少加载一次之前在设置文件中设置了这些变量,则数据库服务器将无法成功启动。
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'server_audit%';
SHOW GLOBAL VARIABLES LIKE 'server_audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | CONNECT,QUERY,TABLE |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | ON |
| server_audit_mode | 0 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
| 参数说明:
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:标识版本,用于开发测试
可以在my.cnf、my.ini大概创建/etc/my.cnf.d/server.cnf添加如下内容;发起在server.cnf中进行
[mysqld]
plugin_load=server_audit=server_audit.so
server_audit_events=connect,query
server_audit_logging = on
| 由MariaDB审计插件记载的变乱通常被分组为不同的范例:连接、查询和表变乱,若要基于这些范例的变乱进行日记记载,请将变量SERVER_AUDIT_Events设置为连接、查询或表。要让审计插件日记有多个范例的变乱,请将它们放在逗号分隔的列表中,如下所示:
SET GLOBAL server_audit_events = 'CONNECT,QUERY,TABLE’;
MariaDB [(none)]> SET GLOBAL server_audit_events = 'CONNECT,QUERY,TABLE';
Query OK, 0 rows affected (0.00 sec)
默认环境下,日记被设置为关闭,启用设置server_audit_logging为on。
请留意:如果启用了查询缓存,并且从查询缓存中返回了查询,则不会出现表记载,由于服务器没有打开或访问任何表,而依赖于缓存的结果。因此可能禁用查询缓存。
现实上有几种范例的变乱可能被记载,而不仅仅是上面提到的三种常见变乱。相关的体系变量列表以server_audit体系变量和状态变量的详细页面,对本文档的server_audit状态变量页面。下面着重先容此中的一些重要问题(摘自官方):
三、数据库审计详解
由于除了DDL和DML之外,还有其他范例的查询,因此将query_dl和query_dml选项一起使用并不等同于使用查询。从审计插件的1.3.0版本开始,有用于记载DCL范例查询的查询_DCL选项(例如,GRANT和REVOKE语句)。在同一版本中,添加了SERVER_AUDIT_QUERY_LOG_LAND变量,以便能够设置日记记载的长度。从前由于查询字符串较长,日记条目将被截断。
3.1、日记连接变乱
如果已将审核插件设置为记载连接变乱,则它将记载连接、断开连接和失败连接。对于失败的连接,日记包含错误代码,可以界说一个用户列表,此中的变乱可以被清除或包括在跟踪他们的数据库运动中。但是对于连接变乱的日记记载,此列表将被忽略。这是由于审计区分了技术用户和物理用户。所有范例的用户都必要记载连接;只有物理用户才必要记载对对象的访问。
3.2、日记查询变乱
如果启用了查询变乱日记记载,则将为界说的用户记载执行的查询。查询将在执行时以纯文本情势记载下来。这是一个安全漏洞:任何访问日记文件的人都可以读取查询。因此请确保只有受信任的用户才能访问日记文件,并且文件位于受掩护的位置。另一种方法不是使用查询变乱日记,而是只使用表变乱日记记载。 如果查询不能执行,如果查询不成功,也会记载查询。例如由于语法错误或用户没有访问对象所需的权限、查询将被记载。这些查询可以由日记中提供的错误代码进行解析。 可能会发现失败的查询:它们可能袒露应用步伐的问题(例如应用步伐中的SQL语句与当前模式不匹配)。它们还可以表现恶意用户是否正在猜测表和列的名称,以实行访问数据。 下面是一个示例,此中用户试图在他没有权限的表上执行UPDATE语句:
UPDATE employees
SET salary = salary * 1.2
WHERE emp_id = 18236;
ERROR 1142 (42000):
UPDATE command denied to user 'bob'@'localhost' for table 'employees'
| 当进入数据库进行操纵时,所有的查询、修改、删除等操纵都被记载到/var/lib/mysql/server_audit.log文件中,审计日记记载如下:
20240118 18:58:02,ctc-bjlg-snorby,,,5,0,DISCONNECT,,,0
20240118 18:58:02,ctc-bjlg-snorby,,,43,0,DISCONNECT,,,0
20240118 18:58:05,ctc-bjlg-snorby,UNKNOWN_MYSQL_US,localhost,1,0,FAILED_CONNECT,,,1045
20240118 18:58:05,ctc-bjlg-snorby,,,1,0,DISCONNECT,,,0
20240118 18:58:22,ctc-bjlg-snorby,root,localhost,2,0,CONNECT,,,0
20240118 18:58:22,ctc-bjlg-snorby,root,localhost,2,2,QUERY,,'show global status like \'%audit%\'',0
20240118 18:58:39,ctc-bjlg-snorby,,,2,0,DISCONNECT,,,0
20240118 18:58:54,ctc-bjlg-snorby,root,localhost,3,0,CONNECT,,,0
20240118 18:58:54,ctc-bjlg-snorby,root,localhost,3,4,QUERY,,'select @@version_comment limit 1',0
20240118 18:59:02,ctc-bjlg-snorby,root,localhost,3,5,QUERY,,'show databases',0
20240118 18:59:09,ctc-bjlg-snorby,root,localhost,3,6,QUERY,,'SELECT DATABASE()',0
20240118 18:59:09,ctc-bjlg-snorby,root,localhost,3,8,QUERY,snorby,'show databases',0
20240118 18:59:09,ctc-bjlg-snorby,root,localhost,3,9,QUERY,snorby,'show tables',0
20240118 18:59:13,ctc-bjlg-snorby,root,localhost,3,41,QUERY,snorby,'show tables',0
20240118 18:59:18,ctc-bjlg-snorby,root,localhost,3,42,QUERY,snorby,'select * from users',0
20240118 19:00:14,ctc-bjlg-snorby,root,localhost,3,43,QUERY,snorby,'SHOW GLOBAL VARIABLES LIKE \'server_audit%\'',0
| 3.3、记任命户运动
审核插件将记载所有用户的数据库运动,或仅记载您指定的用户。数据库运动界说为查询变乱或表变乱。所有用户都记载连接变乱。
可以指定要包括在与server_audit_incl_users变量日记或清除用户与用户server_audit_excl_users变量。如果您希望记载条目,但对受信任应用步伐的条目不感爱好,并希望将它们从日记中清除,这将非常有用。
通常可以使用server_audit_incl_users变量或server_audit_excl_users变量。不外可以使用这两个变量。如果用户名是不经意间设置了这两变量,该用户将被记载由于server_audit_incl_users优先数据库运动。
虽然MariaDB以为用户的用户名和主机名的团结,只有基于用户日记审计插件。MariaDB同时使用用户名和主机名、授予权限的用户的位置有关。特权用户对于跟踪对数据库对象的访问是不相关的。主机名仍然记载在日记中,但日记记载不是基于该信息确定的。
下面的示例演示如何向server_audit_incl_users变量添加一个新的用户名不删除从前的用户名:
SET GLOBAL server_audit_incl_users = CONCAT(@@global.server_audit_incl_users, ',Maria');
记得添加任何新的用户将被包括在日记MariaDB设置文件雷同的变量。否则当服务器重新启动时,它的相关设置将不生效。
3.4、清除审计用户或指定审计用户
默认环境下,所有用户的变乱都会被记载下来,但是某些用户可以通过使用server_AUDIT_EXL_USERS变量被清除在日记记载之外。例如为了清除用户valerianus和ROCK记载他们的变乱:
[mariadb]
server_audit_excl_users=valerianus,rocky
此选项重要用于清除受信任应用步伐的运动。 大概server_AUDIT_INCL_USERS可用于专门包含用户。这两个变量都可以使用,但是如果一个用户出现在两个列表中,server_audd_incl_user具有更高的优先级,并且他们的运动将被记载下来。 留意所有用户都会记载连接变乱,无论这两个设置如何。日记记载也只基于用户名,而不是MariaDB用来确定权限的用户名和主机名组合。
这些变量的值可以由具有超级特权的管理员使用SET语句更改。下面是如何禁用审计日记记载的示例:
SET GLOBAL server_audit_logging=OFF;
3.5、卸载审计插件相关
卸载插件语句可用于卸载审计插件:UNINSTALL PLUGIN server_audit;
偶然为了审计可能必要克制卸载审核插件,为此可以在插件加载一次之后将以下行添加到设置文件中:
[mysqld]
...
plugin_load=server_audit=server_audit.so
server_audit=FORCE_PLUS_PERMANENT
一旦将上面的选项添加到服务器的设置文件并重新启动数据库,如果有人试图卸载审计插件,则会返回错误消息。下面是一个错误消息的示例:
UNINSTALL PLUGIN server_audit;
ERROR 1702 (HY000):
Plugin 'server_audit' is force_plus_permanent and can not be unloaded
参考链接:
https://mariadb.com/kb/en/library/mariadb-audit-plugin-installation/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |