我想限制我的数据库可能只使用存储过程的访问方式。除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'
但这种做法引发了一个错误:
用户无权访问 执行此操作。
我在同一个用户下执行它。我怎样才能得到我需要的东西?
答案 0 :(得分:3)
在尝试sp_addrolemember()之后描述的错误与当前用户没有必要的权限来更改帐户和安全设置有关。
关于运行SqlBulkCopy,它需要写权限,而db_datawriter角色是提供这些权限的便捷方式,但也许您可以考虑替代方案。例如,您可以修改与此特定数据库/表关联的安全设置,而不是增加(如果只是临时)当前帐户的安全权限。
更改“securables”(如数据库对象)的安全设置也需要一些管理权限,但这些权限可能与数据库所有权相关联,因此即使更改帐户的权限不可用,也可以使用这些权限。