Audit.NET 动态获取数据库凭据

Audit.NET obtain database credentials dynamically

我们在配置的时间段内使用 Audit.NET library in our Asp.Net Core project to log user actions. Recently we have decided to use Hashicorp Vault to securely store and obtain secrets including database credentials. Vault engine automatically rotates database credentials,因此静态凭据不再是一个选项。

因此,我们必须实施一项服务,该服务将为所需服务提供当前连接字符串(我们正在使用 PostgreSql)。在数据库上下文的情况下,可以在运行时使用 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 提供程序吗?

在最新版本中,您现在可以将配置值设置为函数,以便在创建审计事件时检索这些值。例如:

Audit.Core.Configuration.Setup()
    .UsePostgreSql(config => config
        .ConnectionString(_ => serviceProvider.GetRequiredService<IDbConnectionStringProvider>().GetConnectionString())
        .Schema("")
        .TableName("")
        .IdColumnName("")
        .DataColumn("", DataType.JSONB)
        .LastUpdatedColumnName("");
    );