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¶
是否開啟註冊功能,關閉後將無法自主註冊使用者