我们使用Audit.NET SqlServer数据提供程序在Microsoft SQL Server中存储审核日志。我们目前正在迁移到使用Azure SQL和托管身份来访问数据库。我们还不能让Audit.NET与Azure SQL一起工作,也不能使用托管身份连接到该数据库。文档没有提供关于是否支持此功能的任何信息。
我们已经设法使用Entity Framework Core为我们自己的数据库连接做到了这一点,方法是向上下文使用的SQL连接添加一个访问令牌,如下所示:
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和托管身份一起工作?
发布于 2020-12-25 07:49:06
我认为最好的方法可能是公开一个可选的设置来提供DbContextOptions,您可以在其中设置一个拦截器,就像here中的拦截器一样,为连接设置AccessToken。
所以你可以像这样初始化你的配置:
Audit.Core.Configuration.Setup()
.UseSqlServer(sql => sql
.ConnectionString("connection string")
.DbContextOptions(new DbContextOptionsBuilder()
.AddInterceptors(new AzureAuthenticationInterceptor(new AzureServiceTokenProvider()))
.Options));或
Audit.Core.Configuration.Setup()
.UseSqlServer(sql => sql
.DbContextOptions(new DbContextOptionsBuilder()
.UseSqlServer("connection string")
.AddInterceptors(new AzureAuthenticationInterceptor(new AzureServiceTokenProvider()))
.Options));更新
在版本16.2.1中添加了新的DbContextOptions设置
https://stackoverflow.com/questions/65440092
复制相似问题