Использование .NET SqlBulkCopy, какое разрешение мне нужно предоставить пользователю в SQL Server 2008?
Какое разрешение необходимо использовать SqlBulkCopy в SQL Server 2008?
Ответ 1
http://msdn.microsoft.com/en-us/library/ms162802.aspx
Для операции bcp out требуется разрешение SELECT для исходной таблицы.
Bcp в действии минимально требует разрешения SELECT/INSERT для целевой таблицы. Кроме того, разрешение ALTER TABLE требуется, если выполняется любое из следующих условий:
-
Ограничения существуют, и подсказка CHECK_CONSTRAINTS не указана. ms162802.note(ru-ru, SQL.100).gifNote: Отключение ограничений является поведением по умолчанию. Чтобы явно включить ограничения, используйте параметр -h с подсказкой CHECK_CONSTRAINTS.
-
Триггеры существуют, и подсказка FIRE_TRIGGER не указана. ms162802.note(ru-ru, SQL.100).gifNote: по умолчанию триггеры не запускаются. Для явного запуска триггеров используйте опцию -h с подсказкой FIRE_TRIGGERS.
-
Вы используете опцию -E для импорта значений идентификаторов из файла данных.
Примечание. Требование разрешения ALTER TABLE для целевой таблицы было впервые введено в SQL Server 2005. Это новое требование может привести к сбоям сценариев bcp, которые не применяют триггеры и проверки ограничений, если у учетной записи пользователя отсутствуют разрешения для таблицы ALTER для целевой таблицы.
Ответ 2
Чтобы указать эти подсказки из .net:
var bulkCopy = new SqlBulkCopy(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints);
Ответ 3
Для успешного выполнения класса SqlBulkCopy необходимы только предварительные настройки SELECT/INSERT. Класс выдает инструкцию INSERT BULK в отношении целевой таблицы SQL Server. Проверено сегодня на одном из наших серверов-разработчиков.
Ответ 4
Существует роль bulkadmin, которая позволяет команды BULK INSERT. http://msdn.microsoft.com/en-us/library/ms189934(SQL.90).aspx