1. 程式人生 > 實用技巧 >SQL稽核平臺

SQL稽核平臺

以往我們一般是採用攜程網開源的inception或整合的平臺來使用,如SQLAdvisior,因鑑於inception已閉源。最新的archery採用goinception,Archery是的分支專案,定位於SQL稽核查詢平臺,旨在提升DBA的工作效率,支援主流資料庫的SQL上線和查詢,同時支援豐富的MySQL運維功能,所有功能都相容手機端操作

功能清單

查詢稽核執行備份資料字典慢日誌會話管理賬號管理引數管理資料歸檔
MySQL
MsSQL × × × × × × × ×
Redis × × × × × × × ×
PgSQL × × × × × × × ×
Oracle × × × × × × × ×
MongoDB × × × × ×

SQL稽核

MySQL例項

基於Inception/goInception實現,整合稽核、執行、備份

非MySQL例項

支援提交和執行工單,依託工作流實現流程化管理

稽核執行分離

審批和執行可以分配給不同的使用者進行操作

SQL工單自動審批、高危語句駁回

  • 支援正則判斷工單是否需要人工審批,開啟自動審批後,不在正則範圍內的SQL語句無需審批,系統自動稽核
  • 自主控制SQL是否自動駁回,可自主配置對inception稽核駁回的場景,支援警告駁回和異常駁回

快速上線其他例項

在工單詳情可快速提交相同SQL內容到其他例項,可適用於test>beta>ga等多套環境維護的需求

定時執行

工單稽核通過後可以選擇定時執行或者立即執行

SQL查詢

多型別資料庫支援

  • MySQL 表級授權、脫敏查詢
  • MsSQL 庫級授權、脫敏查詢
  • Redis 庫級授權
  • PostgreSQL 庫級授權
  • Oracle 庫級授權

授權管理

  • 工作流控制SQL查詢授權,支援庫表級別的許可權限制,以及授權時間,查詢結果集的限制
  • 支援部分語句的動態查詢脫敏(有限的功能)
  • 支援前臺管理使用者許可權,對使用者許可權進行修改和維護
  • 支援查詢匯出、查詢日誌審計

頁面體驗

  • 庫、表、欄位補全提示
  • 多結果級展示
  • 表結構檢視

SQL優化

慢日誌管理

基於PT收集慢日誌,需要單獨部署

SQL語句優化

基於SQLAdvisor|SOAR|SQLTuning的全方位優化建議

例項管理

會話管理

  • 支援檢視和批量終止會話
  • 支援檢視事物、鎖資訊

資料庫管理

管理例項資料庫,支援新增

賬號管理

管理例項賬號,支援增加、授權、刪除

引數配置

可修改例項動態引數並記錄修改歷史

工具外掛

PTArchiver

支援使用pt-archiver歸檔MySQL資料,支援直接新增配置和由使用者申請歸檔

Binlog2SQL

將Binlog2SQL模組視覺化,從MySQL binlog解析出你要的SQL

SchemaSync

對比不同資料庫的Schema資訊,輸出修改語句和回滾語句,SchemaSync不僅限於表結構,它可以處理的物件還有:檢視、事件、儲存過程、函式、觸發器、外來鍵

資源(專案)組

支援自定義資源(專案)組,管理資源組和關聯物件,資源組成員之間審批流程、例項配置、訊息通知等資源隔離

許可權(角色)組

許可權可以分配給使用者,也可以分配給許可權組,支援對大多數操作進行限制,獨立控制使用者的稽核、執行等操作許可權

工作流

工作流審批流程支援多層級多使用者,並且隔離資源組,不同資源組不同的工單型別可以配置不同的審批層級

配置管理

系統配置項、工作流審批流程可在前端頁面動態修改,無需重啟服務實時生效

訊息通知

支援釘釘、企業微信、郵件通知,及時知曉工單狀態變化

視覺化

使用pyecharts實現工單、查詢維度的視覺化統計

功能導圖

上一頁快速開始

部署

準備執行配置

具體可參考:https://github.com/hhyo/Archery/tree/master/src/docker-compose

啟動

下載Releases檔案,解壓後進入docker-compose資料夾 如果網路受限可訪問碼雲地址:gitee

#啟動
docker-compose -f docker-compose.yml up -d

#表結構初始化
docker exec -ti archery /bin/bash
cd /opt/archery
source /opt/venv4archery/bin/activate
python3 manage.py makemigrations sql  
python3 manage.py migrate

#資料初始化
python3 manage.py dbshell<sql/fixtures/auth_group.sql
python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql

#建立管理使用者
python3 manage.py createsuperuser

#重啟服務
docker restart archery

#日誌檢視和問題排查
docker logs archery -f --tail=10
logs/archery.log

訪問

http://127.0.0.1:9123/

修改配置項

系統配置

Inception配置

INCEPTION

是否啟用Inception替換goInception,開啟後需要配置Inception的連線資訊,備份庫的配置地址可複用,將會使用Inception來替代goInception對MySQL進行稽核和執行

GO_INCEPTION_HOST

goInception的連線地址,用於MySQL稽核執行,docker-compose啟動的請配置為容器名,比如goinception,參考文件:https://github.com/hanchuanchuan/goInception

GO_INCEPTION_PORT

goInception的連線埠,預設4000

INCEPTION_HOST

Inception連線HOST,用於SQL查詢語法解析,docker-compose啟動的請配置為容器名,比如inception,參考文件 :https://github.com/hhyo/inception

INCEPTION_PORT

Inception連線埠,即Inception配置檔案inc.cnf內的port

REMOTE_BACKUP_HOST

goInception/Inception的備份庫連結HOST,用於頁面展示回滾語句 - goInception和配置檔案config.toml內的backup_host保持一致 - Inception和配置檔案inc.cnf內的inception_remote_backup_host保持一致,具體說明可參考Inception 備份功能說明

REMOTE_BACKUP_PORT

goInception/Inception的備份庫連結埠 - goInception和配置檔案config.toml內的backup_port保持一致 - Inception和配置檔案inc.cnf內的inception_remote_backup_port保持一致

REMOTE_BACKUP_USER

goInception/Inception的備份庫連結使用者 - goInception和配置檔案config.toml內的backup_user保持一致 - Inception和配置檔案inc.cnf內的inception_remote_system_user保持一致

-- 建議賦予使用者許可權
GRANT SELECT, INSERT, CREATE ON *.* TO 'inception_bak'
REMOTE_BACKUP_PASSWORD

goInception/Inception的備份庫連結使用者 - goInception和配置檔案config.toml內的backup_password保持一致 - Inception和配置檔案inc.cnf內的inception_remote_system_password保持一致

需要注意的是,該配置資訊,僅僅用於archery從備份庫查詢回滾語句使用,該配置資訊不會被goInception服務使用,goInception連線備份庫使用的資料庫連線資訊應在其自身的config.toml中配置。

SQL上線

CRITICAL_DDL_REGEX

高危SQL語句正則判斷條件,用於控制禁止提交的語句,匹配的語句會禁止提交,例如^truncate|^rename|^delete則會禁止提交清空表、修改表名、刪除操作的SQL語句,前端展現如下

AUTO_REVIEW_WRONG

用於控制自動駁回的等級,駁回的工單不會通知稽核人,會系統直接稽核不通過。1表示SQL上線稽核出現警告資訊就駁回,2和空表示出現錯誤才駁回,其他設定表示不駁回,稽核規則請參考Inception所支援的引數變數,前端展現如下

ENABLE_BACKUP_SWITCH

是否開啟備份選項,未開啟時提交SQL工單,將不會顯示是否備份選擇項,系統會強制備份

AUTO_REVIEW

是否開啟SQL上線自動審批,開啟自動審批後,當提交的SQL語句不匹配AUTO_REVIEW_REGEX規則,並且update語句的總影響行數低於MAX_UPDATE_ROWS時,系統則會自動審批通過,前端展現如下

AUTO_REVIEW_REGEX

正則條件,用於過濾部分需要人工稽核的語句,開啟自動審批後,當工單中存在匹配的語句時則需要人工審批,例如^create則表示建表語句需要人工審批

MAX_UPDATE_ROWS

自動審批允許工單最大更新行數,系統會遍歷工單內所有update語句,使用explain預估影響行數,當影響函式超過該值時則工單需要人工審批

MANNUAL

是否開啟SQL上線手工執行確認,開啟後在稽核通過的工單詳情中會出現手工確認按鈕,可以僅僅依靠Archery走工單流程,DBA線下手動執行語句並且確認執行結束

SQL查詢

QUERY_CHECK

相關issues: https://github.com/hhyo/Archery/issues/145

是否開啟SQL查詢脫敏的Inception檢測,平臺的SQL查詢功能依靠Inception的語法樹列印來解析查詢語句中包含的庫、表、欄位資訊,從而進行資料脫敏

  • 開啟QUERY_CHECK後,如果遇到Inception無法解析的語句,則會直接丟擲錯誤資訊,禁止查詢
  • 關閉QUERY_CHECK後,如果遇到Inception無法解析的語句,系統不再進行資料脫敏,會有資料洩露的風險,請謹慎選擇
  • 動態脫敏不支援的語法:巢狀子查詢、部分非單欄位函式,如concat(phone,',')、max(id+num)
DATA_MASKING

是否開啟動態脫敏,會利用inception語法樹列印,結合後臺設定的脫敏欄位和脫敏規則,對查詢資料進行脫敏。遇到無法解析的語句是報錯還是返回未脫敏的資料同樣由QUERY_CHECK引數控制 * 正常脫敏:* 開啟QUERY_CHECK後執行不支援語句* 關閉QUERY_CHECK後執行不支援語句

MAX_EXECUTION_TIME

線上查詢超時時間閾值,單位秒,預設60,超時的語句會被終止並返回提示資訊,目前僅支援MySQL

ADMIN_QUERY_LIMIT

超級管理員的查詢限制行數,超級管理員查詢資料時不做許可權校驗,僅由該引數設定最大行數

SQL優化

SQLADVISOR_PATH

SQLAdvisor的可執行檔案路徑,路徑需要完整,docker映象內已經整合 * 1.4.0以前的docker版本配置成/opt/sqladvisor* 1.4.0以以後的docker版本配置成/opt/archery/src/plugins/sqladvisor

SOAR_PATH

SOAR的可執行檔案路徑,路徑需要完整,docker映象內已經整合,docker映象內已經整合 * 1.4.0以前的docker版本配置成/opt/soar* 1.4.0以以後的docker版本配置成/opt/archery/src/plugins/soar

SOAR_TEST_DSN

參考SOAR文件:命令列引數配置DSN

通知

ARCHERY_BASE_URL

系統首頁地址, 用於釘釘和郵件傳送連結使用,如https://archery.xx.com/

DDL_NOTIFY_AUTH_GROUP

DDL工單通知許可權組名,對應許可權組管理頁面的名稱,為空則不通知,僅DDL工單執行完畢時會進行通知

MAIL

是否開啟郵件通知

MAIL_SSL

是否使用SSL連線

MAIL_SMTP_SERVER

郵件SMTP服務地址,可參考各郵箱對應的設定幫助,例如QQ郵箱的如何使用IMAP服務?

MAIL_SMTP_PORT

郵件SMTP服務埠

MAIL_SMTP_USER

郵件使用者名稱

MAIL_SMTP_PASSWORD

郵件密碼,一般為生成的授權碼

DING

是否開啟釘釘通知,開啟後需要配置資源組的機器人webhook連線,資源組內的所有通知都會通過機器人推送

DING_TO_PERSON

是否開啟釘釘個人通知,使用微應用+工作通知實現

企業微信

參考企業微信接入開發文件,配置成功後訊息會通過企業微信通知

其他配置

阿里雲認證資訊

例項關聯RDS例項ID後,會呼叫RDS介面獲取慢日誌、程序、表空間,其中程序和表空間的獲取需要管理許可權的key

INDEX_PATH_URL

系統首頁路徑,預設是SQL工單頁面

BINLOG2SQL

BINLOG2SQL呼叫路徑,用於實現binlog2sql解析的功能,docker映象內已經整合 * docker部署請配置為/opt/archery/src/plugins/binlog2sql/binlog2sql.py

DEFAULT_AUTH_GROUP

預設許可權組名,新使用者首次登入自動關聯, 老使用者請手動配置

DEFAULT_RESOURCE_GROUP

預設資源組名,新使用者首次登入自動關聯, 老使用者請手動配置

LOCK_TIME_THRESHOLD

賬戶登入失敗鎖定時間(秒)

LOCK_CNT_THRESHOLD

賬戶登入失敗幾次鎖賬戶

SIGN_UP_ENABLED

是否開啟註冊功能,關閉後將無法自主註冊使用者