我正在考虑使用 VaultSharp 来管理我的 Microsoft SQL Server 的静态角色,并且很难让它按我预期的方式工作,并且我相信 VaultSharp 的实施可能会在这方面有所偏差。
这是我创建所需静态角色的代码:
public async Task CreateStaticRole(string roleName)
{
var vaultClient = InitializeVaultClient();
var role = new StaticRole
{
DatabaseProviderType = DatabaseProviderType.MySQL,
Username = roleName,
RotationPeriod = "30",
RotationStatements = new List<string>() { "ALTER LOGIN \"{{name}}\" WITH PASSWORD = '{{password}}';" }
};
await vaultClient.V1.Secrets.Database.CreateStaticRoleAsync(roleName, role);
}
请注意,我使用 MySQL 作为数据库提供程序类型。原因是 MSSQL 不能用作数据库提供程序,但即使是这种实现也不允许您使用 HashiCorp Vault 的一个实例来管理多个 SQL 服务器。数据库提供程序类型与提供给 Vault 的配置名称相对应,如下面的命令所示,因此我在此处使用该 Vault 配置的代码实际上可以工作,但有点hacky,并且也不允许我管理多个 SQL 服务器上的静态角色(尽管我可以管理每个可用的数据库提供程序类型一个,总共有 5 个)。
`vault write database/config/mysql plugin_name=mssql-database-plugin connection_url='sqlserver://{{username}}:{{password}}@sqlserver:1433' allowed_roles="*" username="sa" password="Password"`
也许我在这里遗漏了一些东西,如果有人可以提供建议,将不胜感激。
编辑 我可能可以通过使用不同的挂载而不是默认的挂载来解决这个问题,所以 database/config/sqlserver1/mysql 等,但仍然有点hacky。