我需要在执行db_datawriter
之前授予SqlBulkCopy
并在之后删除它:
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
}
但是我收到了一个错误:
用户无权访问 执行此操作。
我该如何解决?
答案 0 :(得分:1)
答案 1 :(得分:1)
仅仅将运行SqlBulkCopy的用户(仅将数据插入到一个临时登台表中)的权限仅仅授予该单个表的完全权限会不会更容易?
类似的东西:
GRANT ALL ON (temporaryTable) TO my_user
这应该足以执行SqlBulkCopy操作。
为了运行GRANT
命令,运行该命令的用户必须具有这样做的必要权限 - 请参阅有关该主题的SQL联机丛书(GRANT (Transact-SQL)
)。
马克
答案 2 :(得分:1)
MSDN sp_addrolemember告诉您需要哪些权利......
实际上,您需要处于db_securityadmin角色。
但是,为什么不直接通过GRANT保留INSERT / UPDATE权限?授予自己权利的权利意味着不需要任何更多权利的足够的特权......