SQL稽核 | SQLE 二次開發環境搭建

愛可生雲資料庫發表於2022-03-03

作者:Jason

就職於捷信消費金融有限公司,擔任 DBA 工作。先後從事過 oracle 、mongo 、mysql 的 DBA ,以及大資料 ETL 的開發工作。對 NEWSQL 以及雲原生分散式資料庫具有濃厚的興趣愛好。

本文來源:原創投稿

*愛可生開源社群出品,原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。


SQLE 是由上海愛可生資訊科技股份有限公司 開發並開源,支援 SQL稽核、索引優化、事前稽核、事後稽核、支援標準化上線流程、原生支援 MySQL 稽核且資料庫型別可擴充套件的 SQL 稽核工具。

官方主頁:https://opensource.actionsky....
官方文件:Introduction · SQLE manual (actiontech.github.io)

(!!!事先宣告:二次開發純屬於個人技術研究,不得進行任何商業盈利行為)

我們下面來搭建一下 SQLE 的二次開發環境:SQLE 採用了前後臺分離式的開發模式。

後臺採用:go 釋出的 restful API

前臺採用:nodeJS + react

我們先看第一部分:

後臺採用:go 釋出的 restful API

預先準備:go 語言的環境,版本為1.16

開發環境 linux 或者 mac os

這裡需要強調的是 windows 下面程式碼是跑不通的:會遇到如下的錯誤

..\..\..\vendor\github.com\openark\golib\log\log.go:90:19: undefined: syslog.Writer
..\..\..\vendor\github.com\openark\golib\log\log.go:110:22: undefined: syslog.New
..\..\..\vendor\github.com\openark\golib\log\log.go:110:33: undefined: syslog.LOG_ERR

GO 官網的解釋如下:大致的意思就是 windows 環境下沒有具體實現這個 syslog package

This package is not implemented on Windows. As the syslog package is frozen, Windows users are encouraged to use a package outside of the standard library. For background, see https://golang.org/issue/1108.
This package is not implemented on Plan 9.
This package is not implemented on NaCl (Native Client).

這次我們的開發環境是選擇搭建在 linux 的 server 上。

第一步,我們首先需要從 github 上下載完整的專案。(一般國內都需要科學上網)

我這裡直接下載到了 linux 的測試環境中

TEST mongo@wqdcsrv3066[16:03:03]:/data/jason $ git clone https://github.com/actiontech/sqle.git
Cloning into 'sqle'...
remote: Enumerating objects: 28097, done.
remote: Counting objects: 100% (2998/2998), done.
remote: Compressing objects: 100% (1124/1124), done.
Receiving objects:  45% (12786/28097), 34.29 MiB | 2.00 MiB/s

專案下載完畢後,我們需要在 linux 系統上開啟 IDE 匯入這個專案: 我這裡用的是 GOland 。

由於 IDE 是圖形化介面的,我們需要在本地 windows 上使用 VNC viewer 與 linux 的開發機器進行連線:

連線到 server 上之後, 執行命令啟動 Goland 即可

下一步,我們需要匯入之前下載的專案。

匯入後,我們觀察一下專案目錄: 啟動的 package main 包是在 路徑 sqle/cmd/sqld/sqled.go 和 sqle/cmd/sqld/gen_secret_pass.go 這2個檔案

由於專案啟動需要開啟 web 服務的埠並且連線到資料庫,我們可以自己建立一個 sqled.yml 檔案

server:
  sqle_config:
    server_port: 10000
    #auto_migrate_table: 'AUTO_MIGRATE_TABLE'
    #debug_log: 'DEBUG'
    log_path: '/data/sqle-main/logs'
    #plugin_path: '/data/sqle-main/plugins'
  db_config:
    mysql_cnf:
      mysql_host: '10.67.200.37'
      mysql_port: 3306
      mysql_user: 'app_sqle'
      mysql_password: '*******'
      mysql_schema: 'sqle'

我們需要在 MySQL 中建立相應的資料庫以及賬戶:

[root@localhost][performance_schema]> select @@port;
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set (0.00 sec)
[root@localhost][performance_schema]> CREATE DATABASE IF NOT EXISTS sqle default character set utf8mb4 collate utf8mb4_unicode_ci;
Query OK, 1 row affected (3.00 sec)
[root@localhost][performance_schema]> create user app_sqle@'%' identified with mysql_native_password by "***********";
Query OK, 0 rows affected (0.01 sec)
[root@localhost][performance_schema]> grant all on sqle.* to app_sqle@'%';
Query OK, 0 rows affected (0.00 sec

下一步 我們嘗試啟動一下這個專案:

啟動的 package main 包是在路徑 sqle/cmd/sqld/sqled.go 和 sqle/cmd/sqld/gen_secret_pass.go 這2個檔案

需要指定我們的配置檔案:--config /data/sqle-main/sqle/sqled.yml

我們嘗試 go bulild 一下這個專案:

檢視 console 輸出:

我們最後用 postman 測試一下登入的 API:10.67.200.38:10000/v1/login

至此我們後臺環境搭建完畢,下一步我們來搭建前臺環境:

前臺採用:nodeJS + react

Again, 由於 windows 系統對 nodejs 支援不是很好,建議採用 MAC OS 或者 Linux 系統進行開發。

我們這次採用是 windows 上安裝 vs code 通過遠端的方式在 Linux 上進行除錯。

首先,我們先在 Linux OS 上安裝 node js 的環境:

下載 nodejs :http://nodejs.cn/download/

下載完成後,上傳至 linux 伺服器並且解壓安裝如下:

TEST mongo@wqdcsrv3066[15:24:08]:/data/jason/nodejs $ xz -d
node-v16.14.0-linux-x64.tar.xz
TEST mongo@wqdcsrv3066[15:25:38]:/data/jason/nodejs $ tar
-xvf  node-v16.14.0-linux-x64.tar
TEST mongo@wqdcsrv3066[15:27:11]:/data/jason/nodejs $ mv
node-v16.14.0-linux-x64 node
  
TEST mongo@wqdcsrv3066[15:28:19]:/data/jason/nodejs/node $
sudo ln -s /data/jason/nodejs/node/bin/node /usr/bin/node
TEST mongo@wqdcsrv3066[15:28:27]:/data/jason/nodejs/node $
sudo ln -s /data/jason/nodejs/node/bin/npm /usr/bin/npm
TEST mongo@wqdcsrv3066[15:29:03]:/data/jason/nodejs/node $
mkdir node_global
TEST mongo@wqdcsrv3066[15:29:10]:/data/jason/nodejs/node $
mkdir node_cache
TEST mongo@wqdcsrv3066[15:29:15]:/data/jason/nodejs/node $
npm config set prefix "node_global"
TEST mongo@wqdcsrv3066[15:29:21]:/data/jason/nodejs/node $
npm config set cache "node_cache"
TEST mongo@wqdcsrv3066[15:29:33]:/data/jason/nodejs/node $
node --version
v16.14.0

我們要需要安裝 YARN 包,用來編譯程式碼打 build 用:

TEST mongo@wqdcsrv3066[16:52:45]:/home/mongo $ npm install -g yarn
changed 1 package, and audited 2 packages in 2s
found 0 vulnerabilities

同時我們也需要為 YARN 這個命令配置軟連線:

TEST mongo@wqdcsrv3066[17:14:00]:/home/mongo $ sudo ln -s /data/jason/nodejs/node/node_global/bin/yarn /usr/bin/yarn
TEST mongo@wqdcsrv3066[17:16:47]:/home/mongo $ yarn version
yarn version v1.22.17
...
...

至此,我們已經在 linux 上配置完了 nodeJS 的環境,接下來我們要從 github 上下載一下 SQLE 的 UI 庫的程式碼:https://github.com/actiontech...


TEST mongo@wqdcsrv3066[21:38:21]:/data/jason $ git clone
https://github.com/actiontech/sqle-ui.git
Cloning into 'sqle-ui'...
remote: Enumerating objects: 4982, done.
remote: Counting objects: 100% (4982/4982), done.
remote: Compressing objects: 100% (1998/1998), done.
remote: Total 4982 (delta 2809), reused 4648 (delta 2505),
pack-reused 0
Receiving objects: 100% (4982/4982), 2.01 MiB | 89.00 KiB/s,
done.
Resolving deltas: 100% (2809/2809), done.

接下來,我們在 windows 上的 IDE vscode 中配置一下遠端連線 linux 的設定

安裝遠端連線的外掛 Remote Development

安裝完成後會同樣生成圖示。

配置遠端登入的 server 資訊:

需要輸入連線伺服器的密碼:

我們可以看到專案已經匯入成功:

到目前為止,我們已經配置好了開發環境,下一步我們嘗試編譯和啟動一下專案:

當然, 我們還需要修改一下後臺服務的 API 釋出的地址:我們找到檔案 package.json

還有檔案 craco.config.js

我們下一步,來下載專案需要的包:

TEST mongo@wqdcsrv3066[21:26:16]:/data/jason/sqle-ui-new/sqle-ui $ yarn install
yarn install v1.22.17
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[4/5] Linking dependencies...
warning " > @testing-library/user-event@12.8.3" has unmet peer dependency "@testing-library/dom@>=7.21.4".
warning "craco-less > less-loader@7.3.0" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > monaco-editor-webpack-plugin@3.1.0" has unmet peer dependency "webpack@^4.5.0 || 5.x".
warning " > monaco-editor-webpack-plugin@3.1.0" has unmet peer dependency "monaco-editor@0.22.x || 0.23.x || 0.24.x".
warning " > react-monaco-editor@0.43.0" has incorrect peer dependency "@types/react@^17.x".
[5/5] Building fresh packages...
Done in 61.65s.

接著我們要編譯一下程式碼:

$ node ./scripts/moveAntdCss.js && node ./scripts/getGitVersion.js
$ craco build
current mode: ce
Creating an optimized production build...
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating
Compiled successfully.
File sizes after gzip:
  588.6 KB   build/static/js/OrderDetail.4a59ec36.chunk.js
  580.25 KB  build/static/js/CreateOrder.8026b0aa.chunk.js
  532.43 KB  build/static/js/22.c21d2951.chunk.js
  61.76 KB   build/static/js/DataSource.829fc664.chunk.js
  59.74 KB   build/static/js/AuditPlan.9f3f1b23.chunk.js
  57.64 KB   build/static/js/Order.003be5b1.chunk.js
  47.66 KB   build/static/js/User.9fe363ac.chunk.js
  46.36 KB   build/static/js/UserGroup.044f6248.chunk.js
  45.92 KB   build/editor.worker.js
  44.41 KB   build/static/js/RuleTemplate.86cc7bbb.chunk.js
  39.9 KB    build/static/js/Role.039a086a.chunk.js
  29.54 KB   build/static/js/PlanDetail.90341552.chunk.js
  20.63 KB   build/static/js/main.21b0188c.chunk.js
  13.98 KB   build/static/js/3.1aa16012.chunk.js
  13.98 KB   build/static/js/Account.3465705d.chunk.js
  13.23 KB   build/static/js/1.1bb8d820.chunk.js
  10.94 KB   build/static/js/System.9ea63f78.chunk.js
  9.32 KB    build/static/css/CreateOrder.90ee172f.chunk.css
  9.32 KB    build/static/css/OrderDetail.90ee172f.chunk.css
  8.65 KB    build/static/js/4.dfda53f3.chunk.js
  6.44 KB    build/static/js/23.d9ad2202.chunk.js
  5.89 KB    build/static/js/Login.19923fb4.chunk.js
  5.86 KB    build/static/js/Rule.828dfc27.chunk.js
  5.51 KB    build/static/js/0.d9a06cf9.chunk.js
  5.13 KB    build/static/js/2.68214f76.chunk.js
  4.87 KB    build/static/js/Home.aa89add8.chunk.js
  1.88 KB    build/static/js/runtime-main.e8405fb1.js
  1.4 KB     build/static/js/24.6c710535.chunk.js
  982 B      build/static/css/22.b58f2af8.chunk.css
  819 B      build/static/css/main.cdb4f5a9.chunk.css
  493 B      build/static/css/Login.141bcc4c.chunk.css
  313 B      build/static/css/AuditPlan.f5209654.chunk.css
  250 B      build/static/css/RuleTemplate.770a3f55.chunk.css
  139 B      build/static/css/PlanDetail.b50384ea.chunk.css
  96 B       build/static/css/Rule.864c09ef.chunk.css
The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.
The build folder is ready to be deployed.
You may serve it with a static server:
  yarn global add serve
  serve -s build
Find out more about deployment here:
  https://cra.link/deployment
Done in 79.65s.

程式碼編譯完成後,我們在 IDE 中嘗試把專案啟動起來:執行 yarn run start

嘗試瀏覽器訪問SQLE:http://10.67.200.38:3000

嘗試登陸 admin/admin

至此,前臺開開發環境搭建完成!

總體上來說,這種前後端分離的開發方式對開放人員的技術堆疊和綜合能力要求還是比較高的。

另外還要加上資料庫領域的專業知識,並非1、2個人可以完成的。

最後感謝愛可生公司開源了自己的程式碼稽核系統!


愛可生開源社群的 SQLE 是一款面向資料庫使用者和管理者,支援多場景稽核,支援標準化上線流程,原生支援 MySQL 稽核且資料庫型別可擴充套件的 SQL 稽核工具。

獲取方式:

| 型別 | 地址 |
| --- | --- |
| 版本庫 | https://github.com/actiontech... |
| 文件 | https://actiontech.github.io/... |
| 釋出資訊 | https://github.com/actiontech... |


有更多關於 SQLE 相關的技術問題,可以掃碼或直接加入官方QQ技術交流群(637150065)進行交流。歡迎大家來“騷擾”...

相關文章