【问题标题】:Audit.NET obtain database credentials dynamicallyAudit.NET 动态获取数据库凭据
【发布时间】: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&lt;string&gt; 会有所帮助,就像SqlProvider 一样。因此,每次要保存事件时都会解析连接字符串。你能在 github 项目上open an issue 吗?

标签: c# asp.net-core hashicorp-vault audit.net


【解决方案1】:

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

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

【讨论】:

  • Audit.Core.Configuration.Setup 应该在ConfigureServices 的Startup 中呢?目前我在配置中有 Audit.EntityFramework.Configuration.Setup、Audit.Core.Configuration.AddCustomAction 和 Audit.Core.Configuration.Setup
  • 如果你需要来自 DI 机制的东西,你应该把它放在 Configure 方法上,否则可以放在任何一个地方。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多