我们正在运行SQL Server 2012 / .Net Framework 4.5.1
我们有一个应用程序执行以下操作:
当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查询来完成吗?
谢谢,伙计们和加尔斯!
答案 0 :(得分:0)
这是我使用的权限脚本。这通常是每个人都使用的方法,除非他们通过Visual Studio,Red Gate等进行架构比较产品。http://www.csvreader.com/posts/permissions_list.php
您是否使用SqlBulkCopy在目标表上指定架构?您是否可能遇到用户拥有的架构实例?
我的经验是,SqlBulkCopy只需要在目标表上进行选择和插入。 BCP需要您描述的升级权限,这是SqlBulkCopy的另一个好处。