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

问题描述

我们正在Asp.Net Core项目中使用Audit.NET库来记录用户操作。最近,我们决定使用Hashicorp Vault安全地存储和获取包括数据库凭据在内的机密。保管箱引擎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("");
    );

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...