确定两个SQL Server数据库用户之间的安全性差异

时间:2014-11-13 17:28:16

标签: sql-server tsql sql-server-2012 ssms sqlbulkcopy

我们正在运行SQL Server 2012 / .Net Framework 4.5.1

我们有一个应用程序执行以下操作:

  1. 使用.Net的SqlBulkCopy实例从源数据库中提取所有表数据。
  2. 使用常规SQL语句删除目标数据库中的所有数据。
  3. 使用.Net的SqlBulkCopy实例将数据从源数据库部署到目标数据库。
  4. 当SQL连接使用我的Active Directory帐户时,第三步成功,但在使用为此目的创建的SQL Server帐户时失败并显示以下错误消息:无法找到对象“[SchemaName]。[TableName] ]“因为它不存在或您没有权限。

    有趣的是,在遇到导致此错误的表之前,该过程会运行大约十几个表。手动验证证明a)目标上存在表格,b)用户可以从表格中选择问题,c)用户可以使用标准INSERT INTO [SchemaName]手动插入表中的问题。[TableName]([列])VALUES([Values])格式。 BCP也适用于该用户,但使用.Net应用程序中的SqlBulkCopy对同一用户失败。

    我们的DBA(据我所知,实际上是一个经验丰富的人)说目标数据库的数据库权限在两个用户之间是IDENTICAL,但现实似乎表明情况并非如此。

    搜索问题表明用户应具有db_owner或db_ddladmin角色。用户实际上属于两者。

    无论如何,解决本地问题是次要问题,因为我可以完成我的AD帐户所需的工作。 我真正想知道的是,是否有一种烘焙方式可以比较两个用户之间的权限差异。如果没有,可以通过某种类型的T-SQL查询来完成吗?

    谢谢,伙计们和加尔斯!

1 个答案:

答案 0 :(得分:0)

这是我使用的权限脚本。这通常是每个人都使用的方法,除非他们通过Visual Studio,Red Gate等进行架构比较产品。http://www.csvreader.com/posts/permissions_list.php

您是否使用SqlBulkCopy在目标表上指定架构?您是否可能遇到用户拥有的架构实例?

我的经验是,SqlBulkCopy只需要在目标表上进行选择和插入。 BCP需要您描述的升级权限,这是SqlBulkCopy的另一个好处。