Я хочу ограничить доступ к базе данных доступными только для использования хранимых процедур. Все работает отлично, за исключением 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'
но такой подход вызывает ошибку:
У пользователя нет разрешения на выполнение этого действия.
Я выполняю его под тем же пользователем. Как я могу разрешить то, что мне нужно?
Ошибка, описанная после попытки sp_addrolemember (), связана с тем, что текущий пользователь не имеет необходимых прав для изменения настроек учетной записи и безопасности.
Что касается запуска SqlBulkCopy, для этого требуются права записи, а роль db_datawriter - удобный способ их предоставления, но, возможно, вы можете рассмотреть альтернативы. Например, вместо того, чтобы увеличивать (если только временно) привилегии безопасности текущей учетной записи, вы можете изменить параметры безопасности, связанные с этой конкретной базой данных / таблицами.
Изменение параметров безопасности «securables», таких как объекты базы данных, также требует некоторых административных прав, но они могут быть связаны с владением базой данных и, следовательно, могут быть доступны вам, даже если привилегии изменения учетной записи не являются.