`
骑猪逛街666
  • 浏览: 141031 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mysql审计开启--两种方法

 
阅读更多

阅读原文请点击

摘要: 第一种方法:安装插件的方式 这里使用的是macfee的mysql audit插件,虽然日志信息比较大,对性能影响大,但是如果想要开启审计,那也应该忍受了。介绍几个参考地址: wiki首页:https://github.

第一种方法:安装插件的方式
这里使用的是macfee的mysql audit插件,虽然日志信息比较大,对性能影响大,但是如果想要开启审计,那也应该忍受了。介绍几个参考地址:
[root@iZ2zeh44pi6rlahxj7s9azZ data]# ls
audit-plugin-mysql-5.7-1.1.4-725-linux-x86_64.zip  my3307  zzz
[root@iZ2zeh44pi6rlahxj7s9azZ data]# unzip audit-plugin-mysql-5.7-1.1.4-725-linux-x86_64.zip
在配置文件my.cnf的[mysqld]中加入
plugin-load=audit=libaudit_plugin.so
[root@iZ2zeh44pi6rlahxj7s9azZ /]# /data/audit-plugin-mysql-5.7-1.1.4-725/lib/libaudit_plugin.so
[root@iZ2zeh44pi6rlahxj7s9azZ lib]# mv libaudit_plugin.so /opt/mysql/lib/plugin/
[root@iZ2zeh44pi6rlahxj7s9azZ plugin]# chown -R mysql:mysql libaudit_plugin.so
[root@iZ2zeh44pi6rlahxj7s9azZ plugin]# chmod +x libaudit_plugin.so
然后进行插件的加载:
root(none) 04:17:18> INSTALL PLUGIN audit SONAME 'libaudit_plugin.so';
卸载插件的方法:
root(none) 04:17:55> uninstall plugin audit;
插件的加载出现问题(可在error-log中查看):
(1)root@test 05:15:37>INSTALL PLUGIN audit_log SONAME 'libaudit_plugin.so';
ERROR 1127 (HY000): Can't find symbol 'audit_log' in library
原因:是前面说的配置文件中加入的plugin-load=audit=libaudit_plugin.so,中间的audit是对其的命名,如果加载用audit_log则会报错
解决办法:用一致的名字
(2)ERROR 1123 (HY000): Can't initialize function 'audit'; Plugin initialization function failed. 
问题:从报错很明显是因为加载时初始化出现了问题,可能是数据不一致导致的
解决办法:用offest-extract.sh解决,方法如下:
Note: The offest-extract.sh script changed as the plugin added additional offsets. If you are using a build earlier than 1.0.8-515, you will need to use the script from the 1.0.7 tag: https://raw.githubusercontent.com/mcafee/mysql-audit/v1.0.7/offset-extract/offset-extract.sh . Further more, if you are using a build earlier than 1.0.4-451, you will need to use the script from the 1.0.3 tag: https://raw.github.com/mcafee/mysql-audit/v1.0.3/offset-extract/offset-extract.sh
 
[root@iZ2zeh44pi6rlahxj7s9azZ data]# chmod +x ./offset-extract.sh
[root@iZ2zeh44pi6rlahxj7s9azZ data]# ./offset-extract.sh /opt/mysql-5.7.19-linux-glibc2.12-x86_64/bin/mysqld
ERROR: gdb not found. Make sure gdb is installed and on the path.
[root@iZ2zeh44pi6rlahxj7s9azZ data]# yum install gdb
[root@iZ2zeh44pi6rlahxj7s9azZ data]# ./offset-extract.sh /opt/mysql-5.7.19-linux-glibc2.12-x86_64/bin/mysqld
//offsets for: /opt/mysql-5.7.19-linux-glibc2.12-x86_64/bin/mysqld (5.7.19)
{"5.7.19","b4633eb887552a3bbb5db3a1eea76e48", 7800, 7848, 3624, 4776, 456, 360, 0, 32, 64, 160, 536, 7964, 4352, 3648, 3656, 3660, 6048, 2072, 8, 7032, 7072, 7056},
在配置文件my.cnf的[mysqld]中加入
audit_offsets=7800, 7848, 3624, 4776, 456, 360, 0, 32, 64, 160, 536, 7964, 4352, 3648, 3656, 3660, 6048, 2072, 8, 7032, 7072, 7056
然后再次加载插件就可以了。通过show plugins;验证是否成功(最后一行)
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL               | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| ngram                      | ACTIVE   | FTPARSER           | NULL               | GPL     |
| AUDIT                      | ACTIVE   | AUDIT              | libaudit_plugin.so | GPL     |
+----------------------------+----------+--------------------+--------------------+---------+
开启审计日志:
root@test 04:48:57> SET GLOBAL audit_json_file=ON;
进入datadir目录,看到mysql-audit.json的文件即为审计日志文件
ps:具体有关插件的参数含义见https://github.com/mcafee/mysql-audit/wiki/Configuration
 
第二种:通过init-connect
1、创建审计用的库表。
yuelei@(none) 04:36:31>create database db_monitor ;
Query OK, 1 row affected (0.00 sec)
 
yuelei@(none) 04:36:35>use db_monitor ;
Database changed
yuelei@db_monitor 04:37:17>CREATE TABLE accesslog
    -> ( thread_id int(11) DEFAULT NULL,  #进程id
    ->  log_time datetime default null,  #登录时间
    ->  localname varchar(50) DEFAULT NULL, #登录名称,带详细ip
    ->  matchname varchar(50) DEFAULT NULL, #登录用户
    ->  key idx_log_time(log_time)
    -> )
Query OK, 0 rows affected (0.02 sec)
2、配置init-connect参数
yuelei@db_monitor 04:37:21>set global init_connect='insert into db_monitor.accesslog(thread_id,log_time,localname,matchname) values(connection_id(),now(),user(),current_user())';
Query OK, 0 rows affected (0.00 sec)
yuelei@db_monitor 04:39:34>flush privileges;
Query OK, 0 rows affected (0.00 sec)
3、授予普通用户对accesslog表的insert权限(在root用户下)
root@(none) 04:38:34>create user demon@'%';
Query OK, 0 rows affected (0.00 sec)
root@(none) 04:38:34>grant insert on db_monitor.accesslog to demon@'%';
Query OK, 0 rows affected (0.00 sec)
进入具有insert(普通权限)的用户demon中对数据库进行一系列操作
demon@db_monitor 04:39:42>use test;
Database changed
demon@test 04:40:00>delete from test4 where id =10;
Query OK, 1 row affected (0.01 sec)
demon@test 04:40:16>flush privileges;
Query OK, 0 rows affected (0.00 sec)
进入具有高级权限的用户下,查看表中的记录,配合binlog日志是否能追踪到时哪个用户,,结果是一目了然。
root@test 04:40:23>select * from db_monitor.accesslog;
+-----------+---------------------+-----------------+-----------------+
| thread_id | log_time            | localname       | matchname       |
+-----------+---------------------+-----------------+-----------------+
|         9 | 2017-07-24 16:44:43 | demon@127.0.0.1 | demon@127.0.0.1 |
+-----------+---------------------+-----------------+-----------------+
1 row in set (0.00 sec)
[root@iZ2zeh44pi6rlahxj7s9azZ log]# /opt/mysql/bin/mysqlbinlog mysql-bin.000044;
# at 3563
#170724 16:46:23 server id 1  end_log_pos 3624     GTID    last_committed=17    sequence_number=18    rbr_only=no
SET @@SESSION.GTID_NEXT= '90ad28b0-6d2b-11e7-8eb5-00163e06ff5b:347'/*!*/;
# at 3624
#170724 16:46:23 server id 1  end_log_pos 3699     Query    thread_id=9    exec_time=0    error_code=0
SET TIMESTAMP=1500885983/*!*/;
BEGIN
/*!*/;
# at 3699
#170724 16:46:23 server id 1  end_log_pos 3798     Query    thread_id=9    exec_time=0    error_code=0
use `test`/*!*/;
SET TIMESTAMP=1500885983/*!*/;
delete from test3 where id =9
/*!*/;
# at 3798
#170724 16:46:23 server id 1  end_log_pos 3825     Xid = 65
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
 
总结:
第一种方法缺点:日志信息比较大,对性能影响大。优点:对每一时刻每一用户的操作都有记录
第二种方法缺点:只对有低级权限的用户的操作有记录,权限高的则没有 。优点:日志信息比较小,对性能影响小

阅读原文请点击

分享到:
评论

相关推荐

    mysql8.0审计插件Mcafee安装详解

    加载插件有两种方式:使用 SQL 语句直接加载,或者使用 plugin-load。在生产环境中,官方建议使用第二种方式,即在 my.cnf 文件中的 [mysqld] 下添加 plugin-load=AUDIT=libaudit_plugin.so。另外,Mcafee 插件支持...

    笋述MySQL数据的导入导出.pdf

    最新版本可能是 MySQL5.6.17.0,分为32位和64位两种,可以从官方网站免费下载。 - 安装前需确保操作系统是 XP SP3 或 Windows 7,并已安装 .NET Framework 4.0 和 Microsoft Visual C++ 2010 x86 Redistributable ...

    Java面试题-Mysql中级面试题

    #### 十二、MySQL数据库备份方法 - **工具**: 使用 `mysqldump` 命令行工具。 - **示例**: `mysqldump -u username -p dbname > backup.sql` 将数据库导出到SQL文件中。 #### 十三、分区表的概念与优势 - **定义*...

    数据库MySQL二进制恢复

    MySQL的二进制日志支持两种格式:基于语句的二进制日志(SBR, Statement-Based Replication)和基于行的二进制日志(RBR, Row-Based Replication)。 - **基于语句的二进制日志**:记录SQL语句本身,适用于大多数情况,...

    暗月mysql全版本通杀提权神器使用教程

    在MySQL中,通常有两种类型的用户账户:普通用户和root管理员。普通用户只能执行有限的操作,而root用户则拥有对数据库系统的全部控制权。如果一个攻击者能以普通用户身份登录并找到提权路径,那么他就能获取更高的...

    2023最新MySQL经典面试题及答案

    - 两种存储引擎的特性比较,如事务支持、行级锁定、全文搜索等。 - 根据应用场景选择合适的存储引擎。 这些知识点涵盖了MySQL面试的大部分核心内容,深入理解和实践这些概念将大大提高你在面试中的竞争力。在准备...

    55道BAT精选的Mysql面试题!.zip

    - B树和B+树:理解这两种数据结构在索引中的应用。 - 索引类型:主键索引、唯一索引、普通索引、全文索引、空间索引等的区别。 - 聚集索引与非聚集索引:了解其概念及区别。 3. **存储引擎** - InnoDB与MyISAM...

    SANGFOR_DAS_v2.0.2_审计功能测试实施指导.pdf

    - **镜像或Agent方式**:DAS支持两种主要的数据采集方式:一种是通过镜像端口接收网络流量;另一种是通过安装在目标服务器上的Agent软件,主动收集服务器的日志数据。 ##### 6.2 前置条件 - **镜像口配置**:确保...

    mysql 开放外网访问权限的方法

    有两种主要方法来开放外网访问权限: - **允许任意主机**:这将让指定用户(例如`bd`)能够从任何网络位置连接到MySQL服务器。命令如下: ``` mysql> GRANT ALL PRIVILEGES ON *.* TO 'bd'@'%' IDENTIFIED BY '...

    MySQL Replication主从复制全方位解决方案1

    MySQL Replication主从复制是一种确保数据安全性并保持服务持续运行的重要技术。在主从复制架构中,一个MySQL服务器作为主服务器处理写操作,而其他服务器(从服务器)则同步主服务器上的所有更改,以实现数据的实时...

    Navicat9.0-SN.txt

    - **日志记录**:开启日志记录功能,便于追踪错误和审计操作行为。 ### 关于"Navicat9.0-SN.txt"文件 根据文件名“Navicat9.0-SN.txt”和其中的部分内容“1Navicat9Ӣİע롣. ע룺NAVN-SZCN-DGPE-LS63”,可以推测...

    数据库基线检查与安全加固.pptx

    开启日志审计功能 - **配置日志功能**:MySQL提供了多种类型的日志记录,包括错误日志(`-log-err`)、查询日志(`-log`)、慢查询日志(`-log-slow-queries`)、更新日志(`-log-update`)和二进制日志(`-log-bin`)。这些...

    lnmp关闭mysql日志保护硬盘空间的方法

    首先,我们需要了解MySQL中的两种主要日志类型:二进制日志(Binary Log)和查询日志(General Query Log)。二进制日志记录了所有改变数据库状态的语句,用于数据恢复和主从复制;而查询日志则记录了所有的客户端...

    IP-Guard十六个模块功能介绍.pdf

    首先,文档加密系统是IP-Guard的核心组件之一,主要通过透明加密、只读加密这两种加密方式来保护电子文档的安全。透明加密功能确保所有文档在企业内部使用时保持加密状态,员工的使用习惯不会受到影响,而一旦文档被...

    DataBase 资料

    综上所述,通过上述内容我们可以了解到数据库管理的基本概念、MySQL和SQL Server两种常见的数据库系统的特性和配置方法,以及数据库安全性管理的重要性。在实际应用中,合理的数据库设计、高效的管理策略以及严格的...

    基于mysql事务、视图、存储过程、触发器的应用分析

    启动事务有以下两种方式: 1. 使用`BEGIN`、`ROLLBACK`和`COMMIT`语句来控制事务的开始、回滚和提交。例如: ```sql BEGIN; // 开始事务 -- 执行SQL语句 IF (操作成功) THEN COMMIT; // 提交事务 ELSE ROLLBACK; ...

    SQL Injection with MySQL 注入分析

    如上述内容所述,有两种常见的SQL查询格式: 1. 使用单引号包围变量: ```sql SELECT * FROM article WHERE articleid='$id' ``` 这种情况下,如果$id包含恶意SQL代码,它会被当作字符串处理,无法执行。 2. ...

    mysql实现设置定时任务的方法分析

    MySQL数据库提供了一种名为事件调度器(Event Scheduler)的功能,使得开发者可以设置定时任务来自动执行特定的数据库操作,如定期备份、清理过期数据等。以下是对如何在MySQL中设置定时任务的详细分析: 首先,你...

    msyql和oracle数据库服务开关

    理解如何正确开启和关闭这两种数据库服务是数据库管理员日常工作中不可或缺的一部分。 MySQL是一个开源、免费的数据库系统,以其高效、稳定和易用性而受到广泛欢迎。在操作系统中,MySQL的服务通常通过以下方式控制...

    2021-2022计算机二级等级考试试题及答案No.16801.docx

    需要注意的是,默认情况下MySQL并不会开启二进制日志功能,需要在配置文件中显式启用。 ### 7. HTML 超链接 - **超链接标记**:在HTML中,超链接是由`<a>`标签定义的。例如: ```html ...

Global site tag (gtag.js) - Google Analytics