【发布时间】:2020-10-02 09:00:20
【问题描述】:
我们在 Asp.Net Core 项目中使用 Audit.NET 库来记录用户操作。最近我们决定使用Hashicorp Vault 来安全地存储和获取包括数据库凭据在内的秘密。保险柜引擎automatically rotates database credentials 在配置的时间段内,因此不再提供静态凭据。
因此,我们必须实现一个服务,它将当前连接字符串(我们使用 PostgreSql)提供给所需的服务。对于 DB 上下文,可以在运行时使用 Startup.cs 中的以下代码获取连接字符串:
services.AddDbContext<AppDbContext>((serviceProvider, options) =>
{
var databaseCredentialsProvider = serviceProvider.GetRequiredService<IDbConnectionStringProvider>();
var connectionString = databaseCredentialsProvider.GetConnectionString();
options.UseNpgsql(connectionString);
});
但是,关于 Audit.NET 配置,它似乎只能设置静态凭据。我们在 Startup.cs 中使用以下代码来配置 Audit.NET。
Audit.Core.Configuration.Setup()
.UsePostgreSql(config => config
.ConnectionString(Configuration.GetConnectionString(""))
.Schema("")
.TableName("")
.IdColumnName("")
.DataColumn("", DataType.JSONB)
.LastUpdatedColumnName("");
);
我查看了 UsePostgreSql 的源代码 - 它设置了一次凭据,因此不能选择使用此扩展方法。
有没有办法配置 Audit.NET 以动态获取数据库凭据?那么我应该实现自定义 UsePostgreSql 提供程序吗?
【问题讨论】:
-
我认为提供
ConnectionStringBuilder作为Func<string>会有所帮助,就像SqlProvider 一样。因此,每次要保存事件时都会解析连接字符串。你能在 github 项目上open an issue 吗?
标签: c# asp.net-core hashicorp-vault audit.net