Мы используем LINQ to Entities для записи записей в базу данных аудита (SQL Server 2008). Поскольку это специальная база данных аудита, мы только Вставляем строки - мы никогда не читаем строки, не обновляем и не удаляем их из приложения аудита.Entify Framework Вставки требуют выбора разрешений
Приложение для аудита должно использовать принцип наименьшей привилегии, поэтому мы не хотим предоставлять ему больше разрешений, чем нужно. Поскольку мы никогда не читаем никаких строк, мы не хотим предоставлять разрешения для выбора из базы данных.
Однако при попытке записать данные, мы получим следующее сообщение об ошибке:
SELECT, разрешение было отказано на объекте «AuditEvent», база данных «IdentifyAudit», схемы "ДБО.
код довольно стандартный код EF:
var auditEvent = new AuditEvent();
auditEvent.EventType = eventType;
auditEvent.Timestamp = timestamp;
auditEvent.UserName = userName;
auditEvent.ApplicationId = this.ApplicationId;
this.objectContext.AddToAuditEvents(auditEvent);
this.objectContext.SaveChanges();
Почему нам нужно ВЫБЕРИТЕ разрешение на запись в таблице, и что еще более важно: есть ли способ, мы можем удалить это требование?
EDIT
SQL Profiler показывает, что это утверждение выполняется:
exec sp_executesql N'insert [dbo].[AuditEvent]([EventType], [Timestamp], [UserName], [ApplicationId])
values (@0, @1, @2, @3)
select [Id]
from [dbo].[AuditEvent]
where @@ROWCOUNT > 0 and [Id] = scope_identity()',N'@0 nvarchar(10),@1 datetimeoffset(7),@2 nvarchar(11),@3 nvarchar(36)',@0=N'UpdateUser',@1='2009-11-10 10:58:33.2814740 +01:00',@2=N'foo',@3=N'bar'
Это объясняет , почему необходимы SELECT, разрешения, поскольку операция возвращает автоматически сгенерированный идентификатор вставленной строки.
Вопрос сейчас остается открытым: мне не нужно знать идентификатор строки, которую я только что вставил, и есть ли способ отключить эту функцию?
Что показывает SQL Profiler? –
Отредактированный вопрос, включающий данные SQL Profiler. –