Можно ли использовать SqlBulkCopy в SQL 2008 без разрешения db_datawriter? - PullRequest
0 голосов
/ 25 октября 2009

Я хочу ограничить доступ к моей базе данных только с помощью хранимых процедур. Все отлично работает, кроме System.Data.SqlClient.SqlBulkCopy. Я использую его только в одном классе для массивного импорта данных.

Можно ли избежать этой проблемы?

Я пытался предоставить право до вызова SqlBulkCopy и удалить его после:

EXEC [db_mod].[sys].[sp_addrolemember] N'db_datawriter', N'my_user'
EXEC [db_mod].[sys].[sp_droprolemember] N'db_datawriter', N'my_user'

но такой подход вызывает ошибку:

Пользователь не имеет разрешения на выполните это действие.

Я выполняю его под тем же пользователем. Как я могу позволить то, что мне нужно?

1 Ответ

3 голосов
/ 25 октября 2009

Описанная ошибка после попытки sp_addrolemember () связана с тем, что текущий пользователь не имеет необходимых прав для изменения настроек учетной записи и безопасности.

Что касается запуска SqlBulkCopy, ему требуются права на запись, и роль db_datawriter - это удобный способ предоставить их, но, возможно, вы можете рассмотреть альтернативные варианты. Например, вместо увеличения (если только временно) привилегий безопасности текущей учетной записи вы можете изменить параметры безопасности, связанные с этой конкретной базой данных / таблицами.

Изменение параметров безопасности «защищаемых объектов», таких как объекты базы данных, также требует некоторых административных привилегий, но они могут быть связаны с владением базой данных и, следовательно, могут быть доступны вам, даже если привилегии смены учетной записи недоступны.

...