1. 程式人生 > >宜信開源|數據庫審核軟件Themis的規則解析與部署攻略

宜信開源|數據庫審核軟件Themis的規則解析與部署攻略

類信息 插入 密碼 指數 csdn 設置 技術學 ORC setting

一、介紹

Themis是宜信公司DBA團隊開發的一款數據庫審核產品,可幫助DBA、開發人員快速發現數據庫質量問題,提升工作效率。其名稱源自希臘神話中的正義與法律女神。項目取此名稱,寓意此平臺對數據庫質量公平判斷,明察秋毫。

此平臺可實現對Oracle、MySQL數據庫進行多維度(對象結構、SQL文本、執行計劃及執行特征)的審核,用以評估對象結構設計質量及SQL運行效率。可幫助DBA及開發人員,快速發現定位問題;並提供部分輔助診斷能力,提升優化工作效率。全部操作均可通過WEB界面進行,簡單便捷。此外,為了更好滿足個性化需求,平臺還提供了擴展能力,用戶可根據需要自行擴展。

Themis,是希臘正義與法律女神,以頭腦清晰見稱。項目采用此名稱,寓意著平臺可對數據庫質量公平判斷,明察秋毫之意。

1.1 功能概述

  • 事後審核,自主優化部分放在二期實現。亦可在項目設計階段引入,起到一部分事前審核的作用。
  • 通過WEB界面完成全部工作,主要使用者是DBA和有一定數據庫基礎的研發人員。
  • 可針對某個用戶審核,可審核包括數據結構、SQL文本、SQL執行特征、SQL執行計劃等多個維度。
  • 審核結果通過WEB頁面或導出文件的形式提供。
  • 平臺支持主流的Oracle、MySQL數據庫,其他數據庫放在二期實現。
  • 盡量提供靈活定制的能力,便於日後擴展功能。

1.2 支持的數據庫

  • MySQL(5.6及以上)

  • Oracle(10g及以上)

1.3 審核維度

  • 數據庫結果(對象)=》指數據庫對象,常見的表、分區、索引、視圖、觸發器等。

  • SQL文本(語句)=》指SQL語句文本本身。

  • SQL執行計劃=》指數據庫中SQL的執行計劃。

  • SQL執行特征=》指語句在數據庫上的真實執行情況。

1.4 實現原理

技術分享圖片

整個平臺的基本實現原理很簡單,就是將我們的審核對象(目前支持四種),通過規則集進行篩選。符合規則的審核對象,都是疑似有問題的。平臺會將這些問題及關聯信息提供出來,供人工甄別使用。由此可見,平臺的功能強大與否,主要取決於規則集的豐富程度。平臺也提供了部分擴展能力,方便擴展規則集。

1.5 平臺架構

技術分享圖片

圖中的方框部分,為平臺的主要模塊。底色不同的模塊,表示當前的進度狀態不同。虛線代表數據流,實線代表控制流。其核心為這幾個模塊:

  • 數據采集模塊。它是負責從數據源抓取審核需要的基礎數據。目前支持從Oracle、MySQL抓取。
  • OBJ/SQL存儲庫。這是系統的共同存儲部分,采集的數據和處理過程中的中間數據、結果數據都保存在這裏。其核心數據分為對象類和SQL類。物理是采用的MongoDB。
  • 核心管理模塊。圖中右側虛線部分包含的兩個模塊:SQL管理和OBJ管理就是這部分。它主要是完成對象的全生命周期管理。目前只做了簡單的對象過濾功能,因此還是白色底色,核心的功能尚未完成。
  • 審核規則和審核引擎模塊。這部分是平臺一期的核心組件。審核規則模塊是完成規則的定義、配置工作。審核引擎模塊是完成具體規則的審核執行部分。
  • 優化規則和優化引擎模塊。這部分是平臺二期的核心組件。目前尚未開發,因此為白色底色。
  • 系統管理模塊。這部分是完成平臺基礎功能,例如任務調度、空間管理、審核報告生成、導出等功能。

1.6 操作流程

技術分享圖片

二、環境搭建

本項目中會使用到mysql,mongo和redis,python支持2.6、2.7,暫不支持python3。

mysql用來存儲pt-query-digest抓取的mysql的慢查詢,mongo存儲我們的規則、oracle的采集結果、執行job,解析結果集等,redis作為任務調度celery的隊列。

在mysql的數據采集部分我們使用的是pt-query-digest工具。

2.1 依賴安裝

新建用戶

為了減少後面對supervisord.conf配置文件的修改,我們建議使用統一的用戶進行安裝

    adduser themis-test
    su - themis-test

後面的操作除了virtualenv安裝需要切換到root用戶,其他的都默認在themis-test用戶下安裝

安裝cx_Oracle依賴

由於在審核過程中需要連接oracle數據庫,因此需要先安裝cx_Oracle的依賴,參考:http://www.jianshu.com/p/pKz5K7

安裝python依賴

首先安裝virtualenv,參考鏈接:https://pypi.python.org/simple/virtualenv/,建議安裝13.0.3或更新版本

如果聯網不方便,或者在公司內網,可以從https://pan.baidu.com/s/1o7AIWlG下載壓縮包,提取碼:3sy3

壓縮包裏包括所有需要用到的依賴包

安裝virtualenv

tar -zxvf virtualenv-13.0.3.tar.gz
cd virtualenv-13.1.0
python setup.py install

關於virtualenv的使用請參考:https://virtualenv.pypa.io/en/stable/

安裝其他依賴

首先初始化虛擬環境

virtualenv python-project --python=python2.7
source /home/themis-test/python-project/bin/activate

解釋一下上面的命令:virtualenv的第二個參數python-project是我們建立的虛擬環境的名稱,這個名稱我們雖然可以隨便定義,但是後面supervisor的配置中使用了此名稱,建議使用默認的,大家如果對python比較熟悉,可以隨意定義。後面我們指定了python的版本,--python可以不加,默認會使用系統自帶的python版本構建虛擬環境,當有多個版本的python時,可以使用此命令指定版本。

下面使用source初始化虛擬環境,以後安裝的包依賴等都會被裝到/home/themis-test/python-project/home/themis-test/python2.7/lib/python2.7/site-packages這裏。

如果可以聯網,進入源代碼目錄使用如下命令

pip install -r requirement.txt

單獨安裝Pyh,下載地址:https://github.com/hanxiaomax/pyh

unzip pyh-master.zip
cd pyh-master
python setup.py install

如果在局域網環境不方便聯網請利用的上面網盤裏提供的壓縮包

pip install --no-index -f file:///home/themis-test/software -r requirement.txt

file:///home/themis-test/software是壓縮包解壓的位置

2.2 配置文件介紹

下面以配置文件settings.py為例子說明需要的一些依賴

# # set oracle ipaddress, port, sid, account, password
# ipaddres : port -> key
ORACLE_ACCOUNT = {
    # oracle
    "127.0.0.1:1521": ["cedb", "system", "password"]
}

# set mysql ipaddress, port, account, password
MYSQL_ACCOUNT = {
    "127.0.0.1:3307": ["mysql", "user", "password"]
}

# pt-query save data for mysql account, password
PT_QUERY_USER = "user"
PT_QUERY_PORT = 3306
PT_QUERY_SERVER = "127.0.0.1"
PT_QUERY_PASSWD = "password"
PT_QUERY_DB = "slow_query_log"

# celery setting
REDIS_BROKER = ‘redis://:[email protected]:6379/0‘
# REDIS_BROKER = ‘redis://:@127.0.0.1:6379/0‘

REDIS_BACKEND = ‘redis://:[email protected]:6379/0‘
# REDIS_BACKEND = ‘redis://:@127.0.0.1:6379/0‘

CELERY_CONF = {
    "CELERYD_POOL_RESTARTS": True
}

# mongo server settings
MONGO_SERVER = "127.0.0.1"
MONGO_PORT = 27017
# MONGO_USER = "sqlreview"
MONGO_USER = "sqlreview"
# MONGO_PASSWORD = ""
MONGO_PASSWORD = "sqlreview"
MONGO_DB = "sqlreview"

# server port setting
SERVER_PORT = 7000

# capture time setting
CAPTURE_OBJ_HOUR = "18"
CAPTURE_OBJ_MINUTE = 15
CAPTURE_OTHER_HOUR = "18"
CAPTURE_OTHER_MINUTE = 30

ORACLE_ACCOUNT和MYSQL_ACCOUNT是我們需要審核的目標機器的帳號和密碼,主要是在數據采集部分和對象類審核以及mysql的執行計劃類審核部分會用到,因此該帳號應該具有較高的權限,為了安全在生產環境應該設置專有的帳號並設置專有的權限,或者加上一些ip的限制等。

PT_QUERY_USER、PT_QUERY_PORT、PT_QUERY_SERVER、PT_QUERY_PASSWD、PT_QUERY_DB是我們pt-query-digest工具解析目標機器的慢sql後需要存儲到的mysql數據庫的一些配置。

REDIS_BROKER、REDIS_BACKEND、CELERY_CONF是任務調度工具celery的配置選項。

MONGO_SERVER、MONGO_PORT、MONGO_USER、MONGO_PASSWORD、MONGO_DB是需要存儲結果集的mongo的配置選項。

SERVER_PORT是web管理端監聽的端口,不要使用9000和5555端口,這兩個被分配給了文件下載服務器和flower管理工具。

CAPTURE_OBJ_HOUR、CAPTURE_OBJ_MINUTE、CAPTURE_OTHER_HOUR、CAPTURE_OTHER_MINUTE是針對oracle的數據采集模塊需要設置的采集時間,根據自己的實際情況設置不同的時間即可,避開業務高峰期。

請按照相關說明配置該文件

2.3 規則導入

進入源代碼目錄,使用如下命令進行規則初始化

mongoimport -h 127.0.0.1 --port 27017 -u sqlreview -p password -d sqlreview -c rule --file script/rule.json

三、數據采集

數據采集分為oracle部分和mysql部分,oracle部分使用的是自己開發的一些腳本,mysql使用的是pt-query-digest工具。

數據采集的頻率默認是一天一次,可以根據自己的需要進行修改。

oracle部分依賴於celery的任務調度,會用supervisor托管,pt-query-digest可以加到crontab裏。

3.1 oracle部分

手動數據采集

手動采集oracle obj信息

配置data/capture_obj.json文件

{
    "module": "capture",   
    "type": "OBJ",    
    "db_type": "O",    
    "db_server": "127.0.0.1",    
    "db_port": 1521,   
    "capture_date": "2017-02-28"
}

只需要配置db_server和dbport選項,oracle的端口要求是1521,capture_date指定采集數據的日期,現在只支持按天采集

執行命令

python command.py -m capture_obj -c data/capture_obj.json

手動采集oracle other信息,包括plan、stat、text信息。

配置data/capture_other.json文件。

{
    "module": "capture",   
    "type": "OTHER",    
    "db_type": "O",    
    "db_server": "127.0.0.1",    
    "db_port": 1521,    
    "capture_date": "2017-02-28"
}

配置方式同上面的obj

執行命令

python command.py -m capture_obj -c data/capture_obj.json

手動采集數據一般用於初次采集,後面一般都會通過自動采集完成。

自動數據采集

配置settings.py文件裏的ORACLE_ACCOUNT,該賬號需要具有查詢所有表的權限,即select any table。

ORACLE_ACCOUNT = {    
    # oracle    
    "127.0.0.1:1521": ["cedb", "system", "password"]
}

配置調度時間

# capture time setting
CAPTURE_OBJ_HOUR = "18"
CAPTURE_OBJ_MINUTE = 15
CAPTURE_OTHER_HOUR = "18"
CAPTURE_OTHER_MINUTE = 30

如果不對oracle數據庫審核,可以不用配置

3.2 mysql部分

pt-query-digest使用

  • 可以將慢日誌集中到一個地方,再集中入庫
  • 也可以在每臺mysql機器上安裝pt-query-digest,再將解析結果推送到存儲機器上。

本平臺采用第二種方案

從 https://www.percona.com/get/pt-query-digest 下載並安裝pt-query-digest,如果缺少依賴使用yum安裝。

使用scirpt/pt_query_digest.sql初始化表結構,不要使用默認的表結構。

在目標機器上配置好script/pt-query-digest.sh腳本:

pt-query-digest --user=root --password=password --review h=127.0.0.1,D=slow_query_log,t=global_query_review --history h=127.0.0.1,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=‘127.0.0.1:3306‘ and \$event->{client}=\$event->{ip}" slow.log

$event->{hostname}=‘127.0.0.1:3306‘ 為被搜集慢日誌的機器的ip地址和端口號。

主要是配置存儲解析結果的mysql機器的帳號,密碼,機器ip,端口號,以及慢日誌的位置等。

運行pt-query-digest.sh腳本開始搜集mysql慢查詢數據,後面可以將其加入定時任務,按固定時間段搜集。

四、規則解析

規則解析分為四塊:對象類規則解析、文本類規則解析、執行計劃類規則解析、統計信息類規則解析。每個模塊都可以使用手動或自動的方式進行。

4.1 對象類規則解析

手動解析oracle對象類信息

配置data/analysis_o_obj.json文件

{
    "module": "analysis",
    "type": "OBJ",
    "db_server": "127.0.0.1",
    "db_port": 1521,
    "username": "schema",
    "db_type": "O",
    "rule_type": "OBJ",
    "rule_status": "ON",
    "create_user": "system",
    "task_ip": "127.0.0.1",
    "task_port": 1521
}

配置db_server、db_port、username、create_user、task_ip選項,其他的保持默認即可,username是需要審核的目標對象的名字。

python command.py -m analysis_o_obj -c data/analysis_o_obj.json

使用上面的命令開始采集obj數據

手動解析mysql對象類數據

配置data/analysis_m_obj.json文件

{
    "module": "mysql",
    "type": "OBJ",
    "db_server": "127.0.0.1",
    "db_port": 3306,
    "username": "schema",
    "db_type": "mysql",
    "rule_type": "OBJ",
    "rule_status": "ON",
    "create_user": "mysqluser",
    "task_ip": "127.0.0.1",
    "task_port": 3306
}

配置db_server、db_port、username、create_user、task_ip、db_port選項,其他的保持默認即可。

運行命令:

python command.py -m analysis_m_obj -c data/analysis_m_obj.json

oracle和mysql對象類規則是不需要依賴於采集的數據的,它是直接連接到數據庫裏進行查詢的,由於有的庫較大可能時間會比較久,建議在業務低峰期進行。

4.2 文本類規則解析

手動解析oracle文本類規則

配置data/analysis_o_text.json文件

{
    "module": "analysis",
    "type": "TEXT",
    "username": "schema",
    "create_user": "SYSTEM",
    "db_type": "O",
    "sid": "cedb",
    "rule_type": "TEXT",
    "rule_status": "ON",
    "hostname": "127.0.0.1",
    "task_ip": "127.0.0.1",
    "task_port": 1521,
    "startdate": "2017-02-23",
    "stopdate": "2017-02-23"
}

配置sid、username、create_user、task_ip、hostname、startdate、stopdate選項,由於數據是按天采集的,因此暫時只支持startdate和stopdate保持一致,hostname和task_ip可以保持一致,其他的保持默認即可。

執行下面的命令即可以進行規則解析:

python command.py -m analysis_o_plan -c data/analysis_o_plan.json

手動解析mysql文本類規則

配置data/oracle_m_text.json文件

    "module": "analysis",
    "type": "TEXT",
    "hostname_max": "127.0.0.1:3306",
    "username": "schema",
    "create_user": "mysqluser",
    "db_type": "mysql",
    "rule_type": "TEXT",
    "rule_status": "ON",
    "task_ip": "127.0.0.1",
    "task_port": 3306,
    "startdate": "2017-02-21 00:00:00",
    "stopdate": "2017-02-22 23:59:00"
}

配置username、create_user、taskip、taskport、hostname、hostname_max、startdate、stopdate選項,hostname和task_ip可以保持一致,其他的保持默認即可。

運行下面的命令即可以進行規則解析:

python command.py -m analysis_m_text -c data/analysis_m_text.json

上面兩步中的username為需要審核的對象。

4.3 執行計劃類規則解析

oracle plan類型規則解析

配置data/analysis_o_plan.json文件

 {
        "module": "analysis",
        "type": "SQLPLAN",
        "capture_date": "2017-02-23",
        "username": "schema",
        "create_user": "SYSTEM",
        "sid": "cedb",
        "db_type": "O",
        "rule_type": "SQLPLAN",
        "rule_status": "ON",
        "task_ip": "127.0.0.1",
        "task_port": 1521
 }

主要是對capture_date,username, create_user, sid,db_type,rule_type,task_ip,task_port參數進行配置,type分為SQLPLAN,SQLSTAT,TEXT,OBJ四種類型,rule_type的類型同SQLPLAN,只不過一個是代表模塊的類型,一個代表規則的類型,db_type分為"O"和“mysql”兩種類型,分別代表oracle和mysql,capture_date為我們欠扁配置的數據的抓取日期。

python command.py -m analysis -c data/analysis_o_plan.json

運行上面的命令即可生成解析結果。

mysql plan規則解析

配置data/analysis_m_plan.json文件

  {
        "module": "analysis",
        "type": "SQLPLAN",
        "hostname_max": "127.0.0.1:3306",
        "db_server": "127.0.0.1",
        "db_port": 3306,
        "username": "schema",
        "db_type": "mysql",
        "rule_status": "ON",
        "create_user": "mysqluser",
        "task_ip": "127.0.0.1",
        "rule_type": "SQLPLAN",
        "task_port": 3306,
        "startdate": "2017-02-21 00:00:00",
        "stopdate": "2017-02-22 23:59:00"
    }

type類型的含義同上面oracle,hostname_max為mysql的ip:端口號的形式,每一個hostname_max代表一個mysql實例,startdate和stopdate需要加上時、分、秒,這一點同oracle不大一樣。

python command.py -m analysis -c data/analysis_m_plan.json

然後運行上面的命令進行mysql的plan的規則解析。

4.4 執行特征類規則解析

oracle stat類型規則解析

配置data/analysis_o_stat.json文件

{
    "module": "analysis",
    "type": "SQLSTAT",
    "capture_date": "2017-02-23",
    "username": "schema",
    "create_user": "SYSTEM",
    "sid": "cedb",
    "db_type": "O",
    "rule_type": "SQLSTAT",
    "rule_status": "ON",
    "task_ip": "127.0.0.1",
    "task_port": 1521
}

配置sid、username、create_user、task_ip、capture_date選項,其他保持默認即可。

運行命令:

python command.py -m analysis_o_stat -c data/analysis_o_stat.json

進行數據采集。

mysql stat類型規則解析

配置文件data/analysis_m_text.json

{
    "module": "analysis",
    "type": "SQLSTAT",
    "hostname_max": "127.0.0.1:3306",
    "db_server": "127.0.0.1",
    "db_port": 3306,
    "username": "schema",
    "db_type": "mysql",
    "rule_status": "ON",
    "create_user": "mysqluser",
    "task_ip": "127.0.0.1",
    "rule_type": "SQLSTAT",
    "task_port": 3306,
    "startdate": "2017-02-21 00:00:00",
    "stopdate": "2017-02-22 23:59:00"
}

配置username、create_user、task_ip、task_port、hostname、hostname_max、startdate、stopdate選項,hostname和task_ip可以保持一致,其他的保持默認即可。

運行命令:

python command.py -m analysis_m_text -c data/analysis_m_text.json

進行數據采集。

4.5 自動規則解析

上面介紹的手動規則解析都是可以進行測試,或者在一些特殊情況下使用,大部分情況我們會使用自動規則解析。

自動規則解析我們使用celery來完成,關於celery 的使用,請參考http://docs.celeryproject.org/en/master/getting-started/first-steps-with-celery.html。

下面是常用的一些關於celery的命令:

開啟規則解析
celery -A task_other worker -E -Q sqlreview_analysis -l info
開啟任務導出
celery -A task_exports worker -E -l info
開啟obj信息抓取
celery -A task_capture worker -E -Q sqlreview_obj -l debug -B -n celery-capture-obj
開啟flower
celery flower --address=0.0.0.0 --broker=redis://:[email protected]:6379/
開啟plan、stat、text抓取
celery -A task_capture worker -E -Q sqlreview_other -l info -B -n celery-capture-other

最後我們會將規則解析都加入到supervisor托管,然後通過web界面生成任務,然後用celery進行調度,通過flower查看任務執行狀態。

關於具體使用請參考supervisor的配置。

五、任務導出

5.1 手動任務導出

配置data/export.json文件

{
    "module": "export",
    "type": "export",
    "task_uuid": "08d03ec6-f80a-11e6-adbc-005056a30561",
    "file_id": "08d03ec6-f80a-11e6-adbc-005056a30561"
}

配置task_uuid和file_id選項,這是任務的唯一標誌,可以通過從mongo中sqlreview庫中job集合查看,然後運行:

python command.py -m export -c data/export.json

進行手動任務導出,會生成離線的html壓縮包,保存在task_export/downloads下,可以直接解壓,然後通過瀏覽器打開查看報告。

5.2 自動任務導出

通過在celery配合supervisor托管來實現,具體可參考supervisor的配置。

六、web管理端

6.1 手動開啟web管理端

執行如下命令

python command.py -m web -c data/web.json

訪問 http://127.0.0.1:7000 即可打開管理端

七、supervisor配置

7.1 supervisor配置

;web管理端開啟
[program:themis-web]
command=/home/themis-test/python-project/bin/python command.py -m web -c data/web.json
autostart=true
redirect_stderr=true
stdout_logfile=tmp/themis_web.log
loglevel=info

;開啟文件下載服務器
[program:themis-download]
command=/home/themis-test/python-project/bin/python task_export/file_download.py
autostart=true
redirect_stderr=true
stdout_logfile=tmp/themis_download.log
loglevel=info

;開啟任務導出模塊
[program:themis-export]
command=/home/themis-test/python-project/bin/celery -A task_exports worker -E -l info
autostart=true
redirect_stderr=true
stdout_logfile=tmp/themis_export.log
loglevel=info
;開啟規則解析模塊
[program:themis-analysis]
command=/home/themis-test/python-project/bin/celery -A task_other worker -E -Q sqlreview_analysis -l info
autostart=true
redirect_stderr=true
stdout_logfile=tmp/themis_analysis.log
loglevel=info
;開啟obj信息抓取模塊
[program:themis-capture-obj]
command=/home/themis-test/python-project/bin/celery -A task_capture worker -E -Q sqlreview_obj -l debug -B -n celery-capture-obj
autostart=true
redirect_stderr=true
stdout_logfile=tmp/themis_capture_obj.log
loglevel=info
;開啟plan、stat、text信息抓取模塊
[program:themis-capture-other]
command=/home/themis-test/python-project/bin/celery -A task_capture worker -E -Q sqlreview_other -l info -B -n celery-capture-other
autostart=true
redirect_stderr=true
stdout_logfile=tmp/themis_capture_other.log
loglevel=info
;celery的任務管理模塊,去掉前邊的";"即可開啟,需要配置redis的連接方式
;[program:themis-flower]
;command=/home/themis-test/python-project/bin/celery flower --address=0.0.0.0 --broker=redis://:[email protected]:6379/0
;autostart=true
;redirect_stderr=true
;stdout_logfile=tmp/themis_flower.log
;loglevel=info

註意:如果前邊建立的用戶不同或者使用了不同的目錄,需要將這個文件裏的/home/themis-test/python-project/替換為自己的路徑。

supervisor常用命令

開啟supervisor
supervisord -c script/supervisord.conf
重載supervisor
supervisorctl -u sqlreview -p sqlreview.themis reload
進入supervisor管理控制臺,這裏的-u,-p代表supervisorctl的用戶名和密碼,在supervisord.conf中配置
supervisorctl -u username -p password

參考:http://www.supervisord.org/

八、內置規則說明

平臺的核心就是規則。規則是一組過濾條件的定義及實現。規則集的豐富程度,代表了平臺的能力。平臺也提供了擴展能力,用戶可自行定義規則。 從分類來看,規則可大致分為幾類。

8.1 規則分類

  • 從數據庫類型來區分,規則可分為Oracle、MySQL。不是所有規則都區分數據庫,文本類的規則就不區分。
  • 從復雜程度來區分,規則可分為簡單規則和復雜規則。這裏的簡單和復雜,實際是指規則審核的實現部分。簡單規則是可以描述為mongodb或關系數據庫的一組查詢語句;而復雜規則是需要在外部通過程序體實現的。
  • 從審核對象角度來區分,規則可分為對象類、文本類、執行計劃類和執行特征類。

8.2 規則參數

規則可以包含參數。例如:執行計劃規則中,有個是大表掃描。這裏就需要通過參數來限定大表的定義,可通過物理大小來指定。

8.3 規則權重及閥值

  • 權重 權重,代表違反規則,一次扣幾分。可根據自身情況進行調節。
  • 閥值 閥值,代表違反規則的扣分上限。這裏主要是為了避免違反單一規則過多,導致忽略了其他規則。

規則權重及扣分,最終會累積為一個總的扣分,平臺會按百分制進行折算。通過這種方式,可起到一定的量化作用。

8.4 規則_對象類(Oracle部分)

技術分享圖片

8.5 規則_對象類(MySQL部分)

技術分享圖片

8.6 規則_執行計劃類(Oracle部分)

技術分享圖片

8.7 規則_執行計劃類(MySQL部分)

技術分享圖片

8.8 規則_執行特征類(Oracle部分)

技術分享圖片

8.9 規則_執行特征類(MySQL部分)

技術分享圖片

8.10 規則_文本類

技術分享圖片

九、常見問題

  • 主機名稱不一致,導致cx_Oracle出錯。
  • celery與flower版本不一致,導致flower不能啟動,升級flower到0.8.1以上。
  • mysql5.7不能初始化datetime默認類型為(DEFAULT ‘0000-00-00 00:00:00)。
  • mongodb文檔最大插入數據有限制,導致生成結果時插入文檔失敗。
  • 在oracle獲取用戶的時候,有的系統可能會將用戶建到users下,因此需要將 NOT IN (‘USERS‘, ‘SYSAUX‘))改成 NOT IN (‘SYSAUX‘))

文件位置:capture/sql.py webui/utils/f_priv_db_user_list.py

有些情況下需要安裝python-devel,centos安裝 yum install python-devel

mysqldb安裝問題參考:http://blog.csdn.net/wklken/article/details/7271019

十、異常處理

程序中間出了差錯可以通過開啟flower來查看,或者通過手工執行的方式進行查看代碼。

flower的開啟可以通過在supervisor中配置或者

;celery的任務管理模塊,去掉前邊的";"即可開啟,需要配置redis的連接方式
;[program:themis-flower]
;command=/home/themis-test/python-project/bin/celery flower --address=0.0.0.0 --broker=redis://:[email protected]:6379/0
;autostart=true
;redirect_stderr=true
;stdout_logfile=tmp/themis_flower.log
;loglevel=info

也可以手工開啟:

celery flower --address=0.0.0.0 --broker=redis://:[email protected]:6379/0

不過都需要配置redis認證選項。

十一、加入開發

有問題可以直接在 https://github.com/CreditEaseDBA/Themis/issues 提出。

來源:宜信技術學院

宜信開源|數據庫審核軟件Themis的規則解析與部署攻略