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

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

  1. import (
  2. "database/sql"
  3. "github.com/gogf/gf/contrib/drivers/mysql/v2"
  4. "github.com/gogf/gf/v2/database/gdb"
  5. )
  6. type MyBizDriver struct {
  7. mysql.Driver
  8. }
  9. // Open creates and returns an underlying sql.DB object for mysql.
  10. // Note that it converts time.Time argument to local timezone in default.
  11. func (d *MyBizDriver) Open(config *gdb.ConfigNode) (db *sql.DB, err error) {
  12. config.User = d.decode(config.User)
  13. config.Pass = d.decode(config.Pass)
  14. return d.Driver.Open(config)
  15. }
  16. func (d *MyBizDriver) decode(s string) string {
  17. // 执行字段解密处理逻辑
  18. // ...
  19. return s
  20. }