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

在某些场景下,数据库的账号密码无法明文配置到配置文件中,需要进行一定的加密。在连接数据库的时候,再对配置文件中加密的字段进行解密处理。这种需求可以通过自定义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
}



Content Menu

  • No labels