凭据管理系统 数据库凭据的应用

这篇说说腾讯云凭据管理系统(SSM)SDK,用于通过数据库凭据自动获取和轮转数据库连接,避免应用直接管理账号密码,支持Golang和Python。 SSM SDK功能:应用传入凭据名称即可获取有效数据库连接,无需关心密码轮转细节。 使用风险:禁止在SDK外部缓存连接或凭据信息,否则轮转后可能导致连接失败。 前提条件:需已有云数据库实例、SSM数据库凭据及具备访问权限的子账号与API密钥。

相关产品
凭据管理系统 产品页,含版本规格、价格与购买入口。

一、使用场景

在应用程序的开发过程中,数据库是常用于存储业务数据的基础服务。

·为了能够对数据库的访问权限进行有效的控制,只有当应用程序在获得合适权限的账号和密码时,才能够创建数据库连接。

·同时为了降低账号和密码泄露的风险,应用程序需要定期更换使用的账号和密码信息。

凭据管理系统(以下简称为 SSM)能够适用于上述场景,避免了应用程序频繁更换账号密码的麻烦,并保证业务数据的安全。

二、SSM SDK 功能特性

基于 SSM 提供的数据库凭据功能,以及数据库账号安全管理的实践教程,腾讯云团队开发了一套应用程序集成的SSM SDK。
应用程序通过调用 SSM SDK,传入数据库连接所需的参数和凭据名称,可以获取到一个可用的数据库连接,不必关心账号密码的获取和轮转的实现细节。

三、支持语言

·Golang 1.13 及以上版本。

·Python 2.7 及以上版本, Python 3 及以上版本。

四、风险提示

SSM 在对数据库凭据进行周期性轮转的时候,会更新账号和密码。
请严格按照 SDK 使用说明来使用 SSM SDK。不要在除了SSM SDK内部逻辑之外的任何地方缓存获取到的数据库连接,也不要缓存获取到的凭据中的任何信息,以避免账号密码失效导致的数据库连接失败情况的发生。

五、前提条件

1. 在腾讯云平台上已购买至少一台云数据库实例,并完成数据库的初始化,同时创建了至少一个database。

2. 在 SSM 控制台中已创建一个数据库凭据,并已关联指定数据库。如未创建数据库凭据,请参见 创建数据库凭据 。

3. 在 访问管理(CAM)控制台 中,需完成以下两点:

·已创建能够访问 SSM 凭据资源和 MySQL 实例资源的子账号。

·给子账号分配了 API 密钥,为了便于获取 SecretId 和 SecretKey 用于 API 的访问。

六、SDK 使用说明

注意:说明:

注意:可直接下载 SDK 源码,根据源码中提供的示例代码来使用。

七、Golang-sdk

1. 获取 go 模块:

(1)运行命令:go get github.com/tencentcloud/ssm-rotation-sdk-golang/lib

(2)在golang项目中引入:

import ( "github.com/tencentcloud/ssm-rotation-sdk-golang/lib/db" "github.com/tencentcloud/ssm-rotation-sdk-golang/lib/ssm")

2. 初始化 DynamicSecretRotationDb 对象。

dbConn = &db.DynamicSecretRotationDb{}err := dbConn.Init(&db.Config{DbConfig: &db.DbConfig{MaxOpenConns: 100,MaxIdleConns: 50,IdleTimeoutSeconds: 100,ReadTimeoutSeconds: 5,WriteTimeoutSeconds: 5,SecretName: "test", // 凭据名IpAddress: "127.0.0.1", // 数据库实例的访问地址Port: 58366, // 数据库实例的访问端口DbName: "database_name", // 指定具体的数据库名,如果为空,则只连接到数据库实例,不连接具体的数据库ParamStr: "charset=utf8&loc=Local", // 数据库连接相关的配置参数},SsmServiceConfig: &ssm.SsmAccount{SecretId: os.Getenv("secret_id"), // 子账号的SecretIdSecretKey: os.Getenv("secret_key"), // 子账号的SecretKeyRegion: "ap-guangzhou", // 选择凭据实际所存储的地域,请根据实际情况填写,示例中给出的是广州地区。},WatchChangeInterval: time.Second * 10, // 监控凭据内容发生变化的间隔,一般间隔时间设置为10秒~60秒之间为宜})

3. 获取数据库连接。

“`golang c := dbConn.GetConn() // 警告:每次需要访问数据库时,都需要调用GetConn()来获取最新的DB连接,请不要在业务代码中缓存此对象,以免DB访问失败! if err := c.Ping(); err != nil { // 示例中只是调用ping()方法测试账号密码的可用性。实际业务中,这里就可以执行具体的db操作了。 log.Fatal("failed to access db with err: ", err) return } “`

4. 关闭数据库连接。

“`golang c.Close() // 当应用程序退出时,可主动关闭数据库连接。这是个通用的操作,和数据库凭据没有直接关系 “`

八、Python-sdk

1. 安装依赖包。

“`shell pip install -r requirements.txt“`

2. 配置信息。

“`python WATCH_FREQ = 10 # 监控凭据内容发生变化的间隔,一般间隔时间设置为10秒~60秒之间为宜db_config = DbConfig(params={ 'secret_name': "test", # 凭据名 'ip_address': "127.0.0.1", # 数据库地址 'port': 58366, # 数据库端口 'db_name': "database_name", # 指定具体的数据库名,如果为空,则只连接到数据库实例,不连接具体的数据库 'param_str': "charset=utf8&loc=Local",})ssm_service_config = SsmAccount(params={ 'secret_id': os.getenv('SECRET_ID'), # 需填写实际可用的SecretId 'secret_key': os.getenv('SECRET_KEY'), # 需填写实际可用的SecretKey 'url': test_url, 'region': "ap-guangzhou" # 选择凭据所存储的地域})config = Config(params={ 'db_config': db_config, 'ssm_service_config': ssm_service_config, 'WATCH_FREQ': WATCH_FREQ}) “`

3. 初始化数据库对象。

“`python db_conn = DynamicSecretRotationDb() err = db_conn.init(config) “`

4. 获取数据库连接。

“`python c = db_conn.get_conn() # 警告:每次需要访问数据库时,都需要调用GetConn()来获取最新的DB连接,请不要在业务代码中缓存此对象,以免DB访问失败! try: c.ping() # 示例中只是调用ping()方法测试账号密码的可用性。实际业务中,这里就可以执行具体的db操作了。 except TencentCloudSDKException as e: logging.error("failed to access db with err: {0}".format(str( e.args[0])).encode("utf-8")) “`

5. 关闭数据库连接。

“`python c.close() # 当应用程序退出时,可主动关闭数据库连接。这是个通用的操作,和数据库凭据没有直接关系 “`

赞 (0)
上一篇 5天前
下一篇 5天前