首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Audit.NET SqlDataProvider与Azure SQL和托管标识一起使用

将Audit.NET SqlDataProvider与Azure SQL和托管标识一起使用
EN

Stack Overflow用户
提问于 2020-12-24 23:10:02
回答 1查看 75关注 0票数 3

我们使用Audit.NET SqlServer数据提供程序在Microsoft SQL Server中存储审核日志。我们目前正在迁移到使用Azure SQL和托管身份来访问数据库。我们还不能让Audit.NET与Azure SQL一起工作,也不能使用托管身份连接到该数据库。文档没有提供关于是否支持此功能的任何信息。

我们已经设法使用Entity Framework Core为我们自己的数据库连接做到了这一点,方法是向上下文使用的SQL连接添加一个访问令牌,如下所示:

代码语言:javascript
复制
SqlConnection sqlConnection = new SqlConnection(connectionString);
sqlConnection.AccessToken = new AzureServiceTokenProvider()
          .GetAccessTokenAsync("https://database.windows.net/")
          .Result;

这可以很好地工作。我们遇到的问题是,我们希望用Sql数据提供程序实现同样的目标。由于SqlDataProvider使用的AuditContext是内部的,我们无法将访问令牌传递给所使用的SqlConnection。

我们想出的唯一解决方案是编写我们自己的数据提供程序,该提供程序实际上与SqlDataProvider相同,唯一的区别是使用的上下文将在SqlConnection上设置访问令牌。这是这里唯一可行的解决方案,还是Audit.NET提供了一些其他方法来让它与Azure SQL和托管身份一起工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-25 07:49:06

我认为最好的方法可能是公开一个可选的设置来提供DbContextOptions,您可以在其中设置一个拦截器,就像here中的拦截器一样,为连接设置AccessToken

所以你可以像这样初始化你的配置:

代码语言:javascript
复制
Audit.Core.Configuration.Setup()
    .UseSqlServer(sql => sql
        .ConnectionString("connection string")
        .DbContextOptions(new DbContextOptionsBuilder()
            .AddInterceptors(new AzureAuthenticationInterceptor(new AzureServiceTokenProvider()))
            .Options));

代码语言:javascript
复制
Audit.Core.Configuration.Setup()
    .UseSqlServer(sql => sql
        .DbContextOptions(new DbContextOptionsBuilder()
            .UseSqlServer("connection string")
            .AddInterceptors(new AzureAuthenticationInterceptor(new AzureServiceTokenProvider()))
            .Options));

更新

在版本16.2.1中添加了新的DbContextOptions设置

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65440092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档