2009-10-26 3 views
0

мне нужно предоставить db_datawriter перед выполнением SqlBulkCopy и удалить его после того, как:Какое право предоставляет пользователю право предоставить другое право на себя в SQL 2008?

try 
{ 
    "EXEC [db_mod].[sys].[sp_addrolemember] N'db_datawriter', N'my_user'" // via SqlCommand 
    bulk.WriteToServer(table); 
} 
finally 
{ 
    "EXEC [db_mod].[sys].[sp_droprolemember] N'db_datawriter', N'my_user'" // via another SqlCommand 
} 

, но я получаю сообщение об ошибке:

User does not have permission to perform this action.

Как я могу исправить это?

ответ

1

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

Что-то вроде:

GRANT ALL ON (temporaryTable) TO my_user 

Это должно быть достаточно, чтобы сделать операцию SqlBulkCopy.

Для выполнения команды GRANT пользователь, выполняющий эту команду, должен иметь необходимые разрешения для этого - см. Раздел «Электронная книга по электронной почте» по этому вопросу (GRANT (Transact-SQL)).

Марк

1

sp_addrolemember MSDN говорит вам, что необходимы права ...

  • Членство в db_owner фиксированной роли базы данных.
  • Членство в фиксированной роли базы данных db_securityadmin.
  • Членство в роли, которой принадлежит эта роль.
  • разрешение ALTER на роль

Практически, Вы должны были бы быть в роли db_securityadmin.

Однако почему бы не просто сохранить права INSERT/UPDATE через GRANT? Право на предоставление прав подразумевает достаточную привилегию, чтобы не требовать больше прав ...

Смежные вопросы