最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql8中的無插件方式審計(jì)

 更新時(shí)間:2023年12月25日 10:17:59   作者:endzhi  
這篇文章主要介紹了Mysql8中的無插件方式審計(jì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

需求

在mysql 8中記錄用戶對(duì)數(shù)據(jù)庫表的操作內(nèi)容,操作時(shí)間,客戶端源ip地址。

在mysql5.7完美地采用MariaDB的server_audit插件來記錄{時(shí)間,節(jié)點(diǎn),用戶,源IP,事件類型,庫,語句,影響行數(shù)}等審計(jì),但從mysql8開始已不支持該插件,同類的第三方插件也無法使用。

目前找到的方式:

[ binlog + init-connect ],binlog可以審計(jì)到所有數(shù)據(jù)記錄及表結(jié)構(gòu)變更相關(guān)的記錄,但,不記錄連接的信息,要通過額外的手段來記錄,比如show full processlist;

是可得出連接信息中的process id,與binlog中的thread id進(jìn)行關(guān)聯(lián)分析,得到連接的信息{用戶名、登錄時(shí)間、源ip},為了永久記錄process id,采用init-connect 方式記錄到數(shù)據(jù)庫表中。

1. 創(chuàng)建init-connect用于記錄的庫和表

       mysql>   create database mysql_access_log;
       mysql>   create table mysql_access_log.access_log ( conn_id int(11) default null, `time` timestamp, `localname` varchar(30), `matchname` varchar(30));

2. 授權(quán)用戶于該庫的表mysql_access_log.accesslog有insert權(quán)限

如用戶user_web

mysql>   grant insert on `mysql_access_log`.`access_log` to 'user_web'@'%';

3. 配置用戶登錄日志插入表

my.cnf中 [mysqld] 下添加,并重啟mysql生效

init-connect='insert into mysql_access_log.access_log values(connection_id(),now(),user(),current_user());'

4. 特別注意

①init-connect只記錄非super權(quán)限用戶,所以好好管理用戶,按情況回收super權(quán)限;

②非super權(quán)限用戶登錄都受init-connect影響,未授權(quán)對(duì)mysql_access_log.access_log有insert權(quán)限的用戶即無法登錄成功!

③當(dāng)重啟mysql后connection_id會(huì)存在不按歷史續(xù)增長而重復(fù)出現(xiàn),所以查記錄時(shí)注意多個(gè)重復(fù)的id記錄。

5. 開啟mysql-binlog日志記錄

my.cnf [mysqld] 下添加,并重啟mysql生效

# 二進(jìn)制日志
log-bin=mysql-bin
# binlog-do-db=db  #僅作用的庫
expire_logs_days = 20
max_binlog_size = 300m

6. 從binlogi日志 取thread_id去查用戶名和源ip

模擬刪除book庫books表中的一條記錄-----過程省略!

解密mysql-bin查看內(nèi)容,找到DELETE操作的thread_id號(hào),如這里的8。

[root@localhost data]# mysqlbinlog  --base64-output=decode-row -vv  mysql-bin.000003  > ./mysql-bin.000003--vv.log  
 
[root@localhost data]# tail -n  30   ./mysql-bin.000003--vv.log
#200712 18:24:01 server id 1  end_log_pos 1008 CRC32 0x62294de5    Query   thread_id=8     exec_time=0   error_code=0
SET TIMESTAMP=1594549441/*!*/;
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
#200712 18:24:01 server id 1  end_log_pos 1079 CRC32 0x0723c708         Table_map: `book`.`books` mapped to number 95
#200712 18:24:01 server id 1  end_log_pos 1187 CRC32 0xc96cc08e         Delete_rows: table id 95 flags: STMT_END_F
### DELETE FROM `book`.`books`
###   @1=44 /* INT meta=0 nullable=0 is_null=0 */
###   @2='XML 完全探索' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */

根據(jù)thread_id號(hào)去找init-connect記錄表的登錄用戶和源ip

[root@localhost data]# mysql -u root -p -e "select * from mysql_access_log.access_log  where conn_id=8 ;" 
| conn_id | time                | localname               | matchname  |
+---------+---------------------+-------------------------+------------+-
|       8 | 2020-07-12 18:23:41 | user_web@192.168.53.119 | user_web@% |
+---------+---------------------+-------------------------+------------+-

7. 開啟general-log日志記錄

[ binlog + init-connect ] 方式,受限于binlog本身記錄日志的局限,無法審計(jì)一些并不記錄在binlog中的內(nèi)容。

比如無SELECT、Connect;可同時(shí)開啟mysql的general-log記錄,記錄執(zhí)行的所有的語句的信息。

my.cnf [mysqld] 下添加,并重啟mysql生效

general-log=1

general_log_file = /opt/mysql/data/general_log_file.log   #按你實(shí)際路徑,注意權(quán)限

但存在的不足

  • a. 無論所執(zhí)行語句是否正確執(zhí)行,都會(huì)記錄,會(huì)導(dǎo)致大量的無用信息,后面的篩選不易操作;
  • b. 當(dāng)server的并發(fā)訪問非常大時(shí),log的記錄會(huì)對(duì)IO產(chǎn)一定的影響,以致于影響server的性能;
  • c. 日志文件很容易快速增長;

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MYSQL中獲取得最后一條記錄的語句

    MYSQL中獲取得最后一條記錄的語句

    MYSQL中獲取得最后一條記錄的語句,需要的朋友可以參考下。
    2010-03-03
  • MySQL中FOR UPDATE的具體用法

    MySQL中FOR UPDATE的具體用法

    本文主要介紹了MySQL中FOR UPDATE的具體用法,它在事務(wù)中起到了鎖定數(shù)據(jù)行的關(guān)鍵作用,確保了數(shù)據(jù)的一致性和可靠性,下面就來具體的介紹一下應(yīng)用場景等,感興趣的可以了解一下
    2024-02-02
  • mysql中的group by高級(jí)用法

    mysql中的group by高級(jí)用法

    MySQL中的GROUP BY是數(shù)據(jù)聚合分析的核心功能,主要用于將結(jié)果集按指定列分組,并結(jié)合聚合函數(shù)進(jìn)行統(tǒng)計(jì)計(jì)算,下面給大家介紹mysql中的group by用法詳解,感興趣的朋友一起看看吧
    2025-04-04
  • MySQL運(yùn)行狀況查詢方式介紹

    MySQL運(yùn)行狀況查詢方式介紹

    直接在命令行下登陸MySQL運(yùn)行SHOW STATUS;查詢語句;同樣的語句還有SHOW VARIABLES;,SHOW STATUS是查看MySQL運(yùn)行情況,和上面那種通過pma查看到的信息基本類似
    2013-06-06
  • mysql手動(dòng)刪除BINLOG的方法

    mysql手動(dòng)刪除BINLOG的方法

    用于刪除列于在指定的日志或日期之前的日志索引中的所有二進(jìn)制日志。這些日志也會(huì)從記錄在日志索引文件
    2013-03-03
  • mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程

    mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • SQL中字符串截取函數(shù)圖文教程

    SQL中字符串截取函數(shù)圖文教程

    在SQL的實(shí)際用途中,經(jīng)常會(huì)碰到需要對(duì)查詢結(jié)果值需要做字段的一些截取,下面這篇文章主要給大家介紹了關(guān)于SQL中字符串截取函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • SQL語句中SUM與COUNT的區(qū)別深入分析

    SQL語句中SUM與COUNT的區(qū)別深入分析

    本篇文章是對(duì)SQL語句中SUM與COUNT的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 準(zhǔn)確獲取MySQL主從延遲時(shí)間的方法

    準(zhǔn)確獲取MySQL主從延遲時(shí)間的方法

    既然是主從,是讀寫分離,那就不可避免會(huì)產(chǎn)生延遲,因?yàn)閿?shù)據(jù)從主機(jī)同步到從機(jī),總是需要時(shí)間的,那么如何準(zhǔn)確獲取主從延遲的時(shí)間呢,本文小編給大家詳細(xì)介紹了準(zhǔn)確獲取MySQL主從延遲時(shí)間的方法,需要的朋友可以參考下
    2025-03-03
  • SQL去重方法匯總

    SQL去重方法匯總

    這篇文章主要給大家分享了SQL去重方法匯總,在使用SQL提數(shù)的時(shí)候,常會(huì)遇到表內(nèi)有重復(fù)值的時(shí)候,比如我們想得到?uv?(獨(dú)立訪客),就需要做去重。下面我們就來看看去重都有哪些方法吧
    2022-01-01

最新評(píng)論

松原市| 德兴市| 泸定县| 金坛市| 海门市| 壶关县| 东乌珠穆沁旗| 吉安市| 井冈山市| 同江市| 航空| 太仆寺旗| 睢宁县| 云林县| 阿克苏市| 韩城市| 宁陵县| 京山县| 开化县| 介休市| 理塘县| 辽源市| 和静县| 虞城县| 通州区| 封开县| 嘉善县| 马龙县| 阳信县| 安西县| 常宁市| 同仁县| 三门峡市| 青铜峡市| 汝阳县| 灵山县| 出国| 建湖县| 邹城市| 天津市| 五台县|