程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql5.6審計功能

Mysql5.6審計功能

編輯:MySQL綜合教程

Mysql5.6審計功能


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 如果設置了audit_log_policy可能會被覆蓋。

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的標簽詳細一些。具體的標簽信息如下: 實例:


 
  2013-09-17T15:03:24 UTC
  1_2013-09-17T15:03:24
  Audit
  1
  1
  /usr/local/mysql/bin/mysqld
    --socket=/usr/local/mysql/mysql.sock
    --port=3306
  x86_64-osx10.6
  5.7.2-m12-log
 
 
  2013-09-17T15:03:40 UTC
  2_2013-09-17T15:03:24
  Connect
  2
  0
  0
  root
  
  localhost
  127.0.0.1
  connect
  root
  
  test
 

...

 
  2013-09-17T15:03:41 UTC
  4_2013-09-17T15:03:24
  Query
  2
  0
  0
  root[root] @ localhost [127.0.0.1]
  
  localhost
  127.0.0.1
  drop_table
  DROP TABLE IF EXISTS t
 
 
  2013-09-17T15:03:41 UTC
  5_2013-09-17T15:03:24
  Query
  2
  0
  0
  root[root] @ localhost [127.0.0.1]
  
  localhost
  127.0.0.1
  create_table
  CREATE TABLE t (i INT)
 

...

 
  2013-09-17T15:03:41 UTC
  7_2013-09-17T15:03:24
  Quit
  2
  0
  0
  
  
  
  
  connect
 

...

 
  2013-09-17T15:03:47 UTC
  9_2013-09-17T15:03:24
  Shutdown
  3
  0
  0
  root[root] @ localhost [127.0.0.1]
  
  localhost
  127.0.0.1
  
 
 
  2013-09-17T15:03:47 UTC
  10_2013-09-17T15:03:24
  Quit
  3
  0
  0
  
  
  
  
  connect
 
 
  2013-09-17T15:03:49 UTC
  11_2013-09-17T15:03:24
  NoAudit
  1
 


:文件的根標簽為,並以 為結束標簽
:包含一系列的必選標簽和可選標簽,可選標簽是否出現取決於audit record類型。
:必選,例如Query,可能出現的值還包含Audit, Binlog Dump, Change user, Close stmt, Connect Out, Connect, Create DB, Daemon, Debug, Delayed insert, Drop DB, Execute, Fetch, Field List, Init DB, Kill, Long Data, NoAudit, Ping, Prepare, Processlist, Query, Quit, Refresh, Register Slave, Reset stmt, Set option, Shutdown, Sleep, Statistics, Table Dump, Time.
:必選,例如28743_2013-09-18T21:03:24,包含一些列數字和時間戳,數字表示的是記錄數,每增加一條記錄,數字加1.
:必選,例如2013-09-17T15:03:49 UTC,包含時間戳和時區兩部分,記錄的是從客戶端接收到的sql執行完時刻的時間。
以下標簽audit record類型決定是否出現
:命令的類型。例如drop_table.
:例如127,代表客戶端連接標識符的無符號整型數字。
:mysql連接的默認數據庫名稱,該標簽只在 值是Connect或Change user時出現.
:client端的主機名,該標簽只在 值是Connect,Change user或Query時出現,例如localhost
:client端的IP地址,該標簽只在 值是Connect,Change user或Query時出現,例如127.0.0.1
:mysql版本號,只在 值是Audit時出現,例如5.7.1-m11-log
:外部用戶,該標簽只在 值是Connect,Change user或Query時出現。
:表示運行數據庫的服務器的操作系統,只在 值是Audit時出現,例如x86_64-Linux
:服務器認證的客戶端名稱。該標簽只在 值是Connect或Change user時出現。例如root
:通過proxy連接到mysql的用戶。該標簽只在 值是Connect或Change user時出現。
:mysql數據庫服務器的ID號,該標簽只在 值是Audit或No Audit時出現。例如1
:實際執行的SQL語句。該標簽只在 值是 Query 或 Execute時出現。例如DELETE FROM t1
:mysql數據庫啟動選項,該標簽只在 值是Audit時出現,例如/usr/local/mysql/bin/mysqld --port=3306 --log-output=FILE
:代表sql命令的執行狀態,0表示成功,其余表示有錯誤。例如1051
:代表sql命令的執行狀態,0表示成功,1表示有錯誤。例如0
:客戶端連接mysql服務器的用戶名。例如root[root] @ localhost [127.0.0.1]
:表示日志文件格式的版本號。該標簽只在 值是Audit時出現。例如1

5. 審計限制

審計日志默認存放在data路徑下,由於XML文件沒有經過加密,官網建議通過參數指定到特殊路徑下,設置相應人員權限,進行安全控制。 此外審計功能有如下情況不能進行記錄: 1)只有top-level(無變量定義)的語句才能進行審計,存儲程序如存儲過程,觸發器,函數等不審計; 2)涉及到外部文件的語句無法進行審計,如load data infile。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved