首頁/ 汽車/ 正文

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

作者:蔡傳旺

前端工程師,負責寫寫頁面並改改bug,豈不快哉;

本文來源:原創投稿

一、SQLE 介紹

SQLE 是一款由愛可生開源社群發起,面向資料庫開發與管理人員,實現了 SQL 的「開發」-「測試」-「上線」等全流程覆蓋,資源與許可權精細化管理,兼顧簡潔與高效,易維護、易擴充套件的的開源專案,旨在為使用者提供一套安全可靠、自主可控的 SQL 質量管控方案。

二、功能介紹

智慧掃描任務是我們可以使用一系列的方式呼叫 sqle 的 openAPI ,將資料傳輸到 sqle 上進行掃描稽核的功能,我們可以從資料庫中傳輸建庫建表語句稽核、可以將慢日誌傳輸到 sqle ,由 sqle 解析掃描 sql 、也可以將 Mybatis 傳輸到 sqle 中掃描解析其中的 sql ,所以 sqle 的智慧掃描任務是非常強大的,那智慧掃描能解析那些資料呢?

三、如何使用掃描任務的 OpenAPI

介紹掃描任務的 OpenAPI

智慧掃描就是我們可用首先定義一個掃描任務,這個任務是針對某個特定的資料路型別,比如 MySQL ,同時我們也會設定任務的執行週期,只要時間一到,sqle 就會自動執行這個掃描任務,剛接觸 sqle 的小夥伴可能比較懵,這個掃描任務建立了,但是沒有內容,是我使用的方式不對嗎?其實不然,sqle 開放了相應的 OpenAPI 介面,我們可以呼叫 OpenAPI 來將我們要稽核的語句傳送給 sqle 中相應的任務。那這個 OpenAPI 在哪裡?怎麼使用這個 OpenAPI 呢?

首先在你按照

官方文件的搭建方式

(https://actiontech。github。io/sqle-docs-cn/2。deploy/overview。html)搭建了一個 sqle 後,我們訪問

http://${your address}:10000/swagger/index。html

就會得到一個 swagger 文件,我們在其中可以找到下圖的兩個 api ,而這兩個 api 就是我們可以直接將 sql 語句傳給掃描任務的 OpenAPI 。

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

使用方法

比如我在環境中建立了一個自定義型別的掃描任務

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

這樣我就得到了這個掃描任務,在任務中我定義了任務型別、稽核週期、資料庫等,得到了一個訪問憑證,這個訪問憑證就是我們使用 OpenAPI 訪問掃描任務中需要使用到的 token 。

使用類似

postman

的工具,開啟一個

post

請求,這裡的

zidingyi

是動態引數,你要改成你的掃描任務的名稱即可

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

請求的 header 是

Content-Type

application/json

Authorization 該掃描任務的訪問憑證

請求的 body 是

{“audit_plan_sql_list”: [ { “audit_plan_sql_counter”: “1”, #匹配到該指紋的語句數量 “audit_plan_sql_fingerprint”: “select * from users where id = ?”, #SQL指紋 “audit_plan_sql_last_receive_text”: “select * from users where id = 1”, #最後一次匹配到該指紋的語句 “audit_plan_sql_last_receive_timestamp”: “2022-08-23T19:30:46。00Z”, #最後一次匹配到該指紋的時間(RFC3339格式) “audit_plan_sql_schema”: “db1” #還不知道 } ] }

經過傳送後就可以在該掃描任務的詳情頁面看到你的sql

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

在這個任務到達稽核時間,就會自動稽核該任務並反饋稽核結果

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

這兩個介面分為全量同步和增量同步,全量同步會覆蓋之前的記錄,而增量同步會在之前的記錄下新增

有這個 api 我們就可以將智慧掃描任務和我們的日常開發運維連線起來,實現稽核 sql 自動化,比如可以

sqle結合jenkins加一個構建流程,在Jenkins任務觸發時會進行sql稽核,這裡有分享文章

(https://mp。weixin。qq。com/s/09-ZMMU3wvZdxrv6WIFFWg)

四、利用 OpenAPI 實現自己的掃描任務工具

前面我介紹了這個 OpenAPI 的高度的自定義性,下面我就給大家展示一下我寫的一個小工具。就算有了 sqle ,但是我還想實現高度的自動化(其實就是比較懶,不想做重複工作),我希望有一個工具直接一鍵就可以將我的 sql 全部上傳到掃描任務裡,然後進行稽核。於是我寫了小工具,可以將檔案或者資料夾裡的 sql 掃描出來並上傳到指定的掃描任務中

自定義配置檔案

host: your IP and portpath: your sql file path eg: 。/test。sqlaudit-name: your audit name eg:zidingyitype: full #full or partial 代表全量同步或者增量同步isIndependent: true #是否使用獨立sql語句傳入(也就是一個sql語句呼叫一次介面傳入)token: your token

自定義配置檔案支援命令和引數和配置檔案繫結,命令列引數優先順序高,也就是優先採用命令列的引數,沒有命令列引數則使用配置檔案的引數

讀取 sql

這一步將分成四種方式讀取 sql 檔案,分別取是否讀取整個資料夾和是否使用獨立 sql 語句傳入的笛卡爾積,共4個函式

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

傳送請求到 api

根據不用的引數將解析的 sql 生成 OpenAPI 的 body 引數,然後可以傳送給 sqle 伺服器,並獲取返回引數。

client := http。Client{} req, err := http。NewRequest(“POST”, fmt。Sprintf(“http://%s/v1/audit_plans/%s/sqls/%s”, cmd。Host, cmd。AuditName, cmd。Type), body) if err != nil { fmt。Println(err。Error()) } req。Header。Set(“Content-Type”, “application/json”) req。Header。Set(“Authorization”, cmd。Token) res, err := client。Do(req) if err != nil { fmt。Println(err。Error()) } defer res。Body。Close() b, _ := ioutil。ReadAll(res。Body) var r = modal。Result{} _ = json。Unmarshal(b, &r) fmt。Println(r) if r。Code != 0 || res。StatusCode != 200 { panic(r。Message) }}

這裡只是簡單的處理一下錯誤,還可以加入發生錯誤自動傳送郵件,或者對接第三方辦公軟體的 api 傳送到指定的群等功能

綜上,一個簡單的小工具就完成了,這樣我就可以一鍵解析 sql 並且將解析的 sql 傳送到 sqle 的掃描任務中了,同時可以根據自己的實際情況增加不同的功能。由此可見,slqe 的掃描任務的自定義程度是非常高的。

這個小工具也是放到github上了,喜歡的可以

看一看

(https://github。com/caichuanwang/sqls)

功能演示

將需要上傳的 sql 準備成一個 sql 檔案,如果需要讀取同一資料夾下多個 sql 檔案,只需要將配置檔案路徑設定成資料夾路徑即可

select * from audit_plans where id = 6; select * from execute_sql_detail where id = 5;

配置自定義配置檔案,這個根據自己的實際情況配置,如果沒有配置,也可以使用命令列引數配置,命令列引數權重大於配置檔案

初次執行對專案進行編譯後執行

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

後期執行只需要直接執行二進位制檔案並使用命令列引數修改部分引數即可

再次檢視掃描任務的詳情即可

SQL稽核 | 如何利用 OpenAPI 實現自己的掃描任務

其他業務場景型別

為了適應不同的業務場景,同時使sqle更加強大,掃描任務支援多種型別的sql的採集任務,包括有

TopSQL

慢日誌

Mybatis掃描

等場景的處理,這裡在我們的

文件有介紹

(https://actiontech。github。io/sqle-docs-cn/3。modules/3。6_auditplan/introduction。html)

五、總結

sqle 的智慧掃描任務的覆蓋面很廣,而且可以高度自定義,在日常的開發運維中可以自動幫助我們解析 sql ,及時發現錯誤的 sql 。大家可以下載安裝 SQLE 並結合自己公司的需求試一下智慧掃描,SQLE 的安裝參考主頁:https://github。com/actiontech/sqle ;

更多使用場景可以參考:https://actiontech。github。io/sqle-docs-cn/3。modules/3。6_auditplan/introduction。html 。

相關文章

頂部