Skip to main content
Version: Latest

如何实现数据库账号密码在配置文件中加密

在某些场景下,数据库的账号密码无法明文配置到配置文件中,需要进行一定的加密。在连接数据库的时候,再对配置文件中加密的字段进行解密处理。这种需求可以通过自定义 Driver 来实现(关于 Driver 的详细介绍请参考章节: ORM接口开发)。以 mysql 为例,我们可以自己编写一个 Driver,包裹框架社区组件中的 mysql driver,并且覆盖它的 Open 方法即可。代码示例:

import (
"database/sql"

"github.com/gogf/gf/contrib/drivers/mysql/v2"
"github.com/gogf/gf/v2/database/gdb"
)

type MyBizDriver struct {
mysql.Driver
}

// Open creates and returns an underlying sql.DB object for mysql.
// Note that it converts time.Time argument to local timezone in default.
func (d *MyBizDriver) Open(config *gdb.ConfigNode) (db *sql.DB, err error) {
config.User = d.decode(config.User)
config.Pass = d.decode(config.Pass)
return d.Driver.Open(config)
}

func (d *MyBizDriver) decode(s string) string {
// 执行字段解密处理逻辑
// ...
return s
}