Мы используем поставщика данных 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;
Это прекрасно работает. Проблема, с которой мы столкнулись, заключается в том, что мы хотим добиться того же с поставщиком данных Audit.NET Sql. Из-за того, что AuditContext, используемый SqlDataProvider, является внутренним, мы не можем передать токен доступа к используемому SqlConnection.
Единственное решение, которое мы придумали, — это написать собственный поставщик данных, который практически такой же, как SqlDataProvider, с той лишь разницей, что используемый контекст устанавливает токен доступа в SqlConnection. Это единственное жизнеспособное решение, или Audit.NET предлагает какой-то другой способ заставить его работать с Azure SQL и Managed Identity?
Я открыл это для вас: github.com/thepirat000/Audit.NET/issues/351
Я думаю, что лучшим способом может быть предоставление дополнительной настройки для предоставления DbContextOptions
, где вы можете установить перехватчик, подобный тому, что из здесь, чтобы установить 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));
Новые настройки DbContextOptions
были добавлены в версии 16.2.1.
Большое спасибо, это именно то, что я искал!
Не могли бы вы открыть тему на github по этому поводу?