# SqlMap配置文件及SqlTemplate模板加密存儲及解析
出于系統信息安全的原因,一些大公司有自己的信息安全規范。其中就有類似這樣的配置文件不允許明文存儲的需求,本orm定制版本也內置了一些API對SqlMap配置文件及SqlTemplate模板密文存儲解析的需求進行支持。
* 本庫內置提供了AES,DES,3DES,RSA四種加密算法支持SqlMap配置文件及SqlTemplate模板加解密存儲解析功能。其中,AES,DES,3DES和標準實現略有不同,如不提供key,本庫會提供了一個內置key,當然您也可以設置自己的key。RSA支持公鑰加密私鑰解密和私鑰加密公鑰解密兩種模式。
~~~
//內置4種加密算法如下
type AesEncrypt struct {
PubKey string
}
type DesEncrypt struct {
PubKey string
}
type TripleDesEncrypt struct {
PubKey string
}
//RSA加密解密算法支持公鑰加密私鑰解密和私鑰加密公鑰解密兩種模式,請合理設置DecryptMode
type RsaEncrypt struct {
PubKey string
PriKey string
pubkey *rsa.PublicKey
prikey *rsa.PrivateKey
EncryptMode int
DecryptMode int
}
const (
RSA_PUBKEY_ENCRYPT_MODE = iota //RSA公鑰加密
RSA_PUBKEY_DECRYPT_MODE //RSA公鑰解密
RSA_PRIKEY_ENCRYPT_MODE //RSA私鑰加密
RSA_PRIKEY_DECRYPT_MODE //RSA私鑰解密
)
~~~
* 除以上4種內置加解密算法外,本庫也支持自定義加解密算法功能,您也可以使用自己實現的加密解密算法,只需要實現Cipher接口即可。
~~~
//如需使用自定義的加密解密算法,只需實現Cipher接口即可
type Cipher interface {
Encrypt(strMsg string) ([]byte, error)
Decrypt(src []byte) (decrypted []byte, err error)
}
//SqlMapOptions中的Cipher實現了加密和解密方法
type SqlMapOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
//SqlTemplateOptions中的Cipher實現了加密和解密方法
type SqlTemplateOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
~~~
* 本庫還提供一個批量配置文件加密工具,采用sciter的Golang綁定庫實現。工具傳送門:[xorm tools](https://github.com/xormplus/tools)。
* 內存中緩存的是經指定解密算法解密之后的配置文件內容或模板內容。
* SqlMap配置文件及SqlTemplate模板加密存儲及解析具體示例如下:
~~~
//如需使用自定義的加密解密算法,只需實現Cipher接口即可
type Cipher interface {
Encrypt(strMsg string) ([]byte, error)
Decrypt(src []byte) (decrypted []byte, err error)
}
//SqlMapOptions中的Cipher實現了加密和解密方法
type SqlMapOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
//SqlTemplateOptions中的Cipher實現了加密和解密方法
type SqlTemplateOptions struct {
Capacity uint
Extension string
Cipher Cipher
}
//如現在我們已經使用3DES加密了SqlMap配置文件和SqlTemplate模板,則xorm初始化方式如下
var err error
engine, err = xorm.NewPostgreSQL("postgres://postgres:root@localhost:5432/mblog?sslmode=disable")
if err != nil {
t.Fatal(err)
}
enc := &xorm.AesEncrypt{
PubKey: "122334",
}
//如自定義加解密算法,則此處傳入的enc為自己實現的加解密算法,后續代碼與本示例一致
err = x.RegisterSqlMap(xorm.Xml("./sql/aes", ".xml"), enc)
if err != nil {
t.Fatal(err)
}
//這里也可以new其他加密解密算法,SqlMap配置文件和SqlTemplate模板的加密結算算法可不相同
err = x.RegisterSqlTemplate(xorm.Pongo2("./sql/aes", ".stpl"), enc)
if err != nil {
t.Fatal(err)
}
//內置4種加密算法如下
type AesEncrypt struct {
PubKey string
}
type DesEncrypt struct {
PubKey string
}
type TripleDesEncrypt struct {
PubKey string
}
//RSA加密解密算法支持公鑰加密私鑰解密和私鑰加密公鑰解密兩種模式,請合理設置DecryptMode
type RsaEncrypt struct {
PubKey string
PriKey string
pubkey *rsa.PublicKey
prikey *rsa.PrivateKey
EncryptMode int
DecryptMode int
}
const (
RSA_PUBKEY_ENCRYPT_MODE = iota //RSA公鑰加密
RSA_PUBKEY_DECRYPT_MODE //RSA公鑰解密
RSA_PRIKEY_ENCRYPT_MODE //RSA私鑰加密
RSA_PRIKEY_DECRYPT_MODE //RSA私鑰解密
)
//RSA使用示例
pukeyStr := `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyqyVCWQBeIgY4FyLnrA1
viOq9m++OyUwXIvpEH7zN7MjeJp7nSK5PBkvv81zIbQrMQXQzTuE52QjYfMfHVoq
FyK+Qxw+B/1qY3TACj8b4TlDS0IrII9u1QBRhGHmtmqJ5c6As/rIqYLQCdbmycC0
3iKBM8990Pff8uq+jqzsoQCFDexZClprR6Vbz3S1ejoFLuDUAXUfNrsudQ/7it3s
Vn540kh4a9MKeSOg68TSmKKQe1huTF03uDAdPuDveFpVU/l7nETH8mFoW06QvvJR
6Dh6FC9LzJA6EOK4fNGeDzJg9e2jByng/ubJM6WeU29uri2zwnMGQ3qsCuGMXBS/
yQIDAQAB
-----END PUBLIC KEY-----`
var err error
engine, err = xorm.NewPostgreSQL("postgres://postgres:root@localhost:5432/mblog?sslmode=disable")
if err != nil {
t.Fatal(err)
}
//公鑰解密
enc := new(xorm.RsaEncrypt)
enc.PubKey = pukeyStr
enc.DecryptMode = xorm.RSA_PUBKEY_DECRYPT_MODE
err = engine.RegisterSqlMap(xorm.Xml("./sql/rsa", ".xml"), enc)
if err != nil {
t.Fatal(err)
}
err = engine.RegisterSqlTemplate(xorm.Pongo2("./sql/rsa", ".stpl"), enc)
if err != nil {
t.Fatal(err)
}
~~~
* 其他相關API
~~~
/*----------------------------------------------------------------------------------------------------
1.ClearSqlMapCipher()可清除SqlMap中設置的Cipher,這樣可以使用engine.LoadSqlMap(filepath)手工加載一些沒有加密的配置文件
2.如果您之后又想加載一些其他加密算法存儲的配置文件,也可以先清除,再重新SetSqlMapCipher()之后加載
3.當然,配置文件也可以不加密存儲,遇到需要部分加密存儲的配置文件可以手工調用SetSqlMapCipher()之后加載
4.注意InitSqlMap()是對整個SqlMapRootDir做統一操作,如您有區別對待的配置文件,請自行設置隔離目錄,使用ClearSqlMapCipher()或SetSqlMapCipher()后調用LoadSqlMap()方法進行指定處理。
----------------------------------------------------------------------------------------------------*/
engine.ClearSqlMapCipher()
engine.SetSqlMapCipher(cipher)
/*----------------------------------------------------------------------------------------------------
1.ClearSqlTemplateCipher()可清除SqlTemplate中設置的Cipher,這樣可以使用engine.LoadSqlTemplate(filepath)手工加載一些沒有加密的模板文件
2.如果您之后又想加載一些其他加密算法存儲的模板文件,也可以先清除,再重新SetSqlTemplateCipher()之后加載
3.當然,配置文件也可以不加密存儲,遇到需要部分加密存儲的配置文件可以手工調用SetSqlTemplateCipher()之后加載
4.注意InitSqlMap()是對整個SqlTemplateRootDir做統一操作,如您有區別對待的配置文件,請自行設置隔離目錄,使用ClearSqlTemplateCipher()或SetSqlTemplateCipher()后調用LoadSqlTemplate()方法進行指定處理。
----------------------------------------------------------------------------------------------------*/
engine.ClearSqlTemplateCipher()
engine.SetSqlTemplateCipher(cipher)
~~~
- xorm
- 創建Orm引擎
- 定義表結構體
- 名稱映射規則
- 前綴映射,后綴映射和緩存映射
- 使用Table和Tag改變名稱映射
- Column屬性定義
- 表結構操作
- 獲取數據庫信息
- 表操作
- 創建索引和唯一索引
- 同步數據庫結構
- 導入導出SQL腳本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相關功能API
- SqlMap配置文件及SqlTemplate模板加密存儲及解析
- 手動管理SqlMap配置及SqlTemplate模板
- 插入數據
- ORM方式插入數據
- 執行SQL命令插入數據
- 創建時間Created
- 查詢和統計數據
- ORM方式查詢和統計數據
- 查詢條件方法
- 臨時開關方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查詢
- 執行SQL查詢
- 執行SQL查詢的11種常用方式
- 查詢返回json或xml字符串
- 鏈式查詢據操返回某條記錄的某個字段的值
- SqlTemplateClient執行過程
- 關于數據庫分頁查詢
- 更新數據
- ORM方式更新數據
- Update方法
- 樂觀鎖Version
- 更新時間Updated
- 執行SQL命令更新數據
- 刪除數據
- ORM方式刪除數據
- Delete方法
- 軟刪除Deleted
- 執行SQL命令刪除數據
- 事務處理
- 簡單事務模型
- 嵌套事務模型
- 八種事務類型及事務傳播機制
- 簡單事務相關API
- 嵌套事務相關API
- 嵌套事務示例代碼
- 主從數據庫(Master/Slave)讀寫分離
- 創建引擎組
- 負載策略
- 引擎組其他配置方法
- 數據庫讀寫分離
- 批量混合SQL操作
- SQL Builder
- 緩存
- 事件
- 數據導出
- Dump數據庫結構和數據
- 查詢結果集導出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet頁數據導出
- 日志
- 連接池
- xorm 工具
- 常見問題
- 感謝支持