为什么证书权限未应用于签名存储过程

时间:2015-05-20 21:22:40

标签: sql-server stored-procedures reporting-services sql-server-2012

我有一个相当长的存储过程,我用它来生成SSRS报告的数据集。虽然我可以使用SSDT在Visual Studio中运行报告并进行部署(SQL SErver 2012),但通过报表管理器运行它是行不通的。使用存储过程时数据集存在问题。如果我尝试使用该登录运行存储过程,我得到:  'Msg 1088,Level 16,State 7,Procedure sp name ,第237行 找不到对象“表名”,因为它不存在或您没有权限。   在这两种情况下,我都在运行我们的开发数据库。报告服务与数据不在同一台计算机上,并且SQL Server未设置为使用Kerberos,因此我使用存储在SSRS中的凭据运行每个报告。

  1. 所有对象都使用sa
  2. 拥有的dbo架构
  3. 我们用于报告的ssrs存储凭证在SQL Server中列为对存储过程具有执行权限(没有拒绝) - 我们倾向于不使用角色。
  4. 由于存储过程的结束使用动态查询(我使用数据透视表,如果添加新数据项,列可以更改,因此使用动态查询),我认为所有权链可能已被破坏。因此,我尝试创建一个证书(而不是使用execute as),将它与一个sql用户&授予用户对上表的选择权限,并使用证书对存储过程进行签名。
  5. 我检查了cert用户的权限&它在表格上有选择权。我的理解是,授予cert用户的权限将添加到运行存储过程的用户的权限中。但我仍然遇到上述错误。我不确定为什么这不起作用......
  6. 签名确实出现了&每当我更改存储过程时,我都会重新签名。如果我尝试将动态sql作为证书用户运行,我会收到错误。由于用户确实存在并且我是sysadmin,我猜它不能被模拟错误是:无法作为数据库主体执行,因为主体“Cert_Dynamic_User”不存在,此类主体不能被模拟,或者您没有权限

0 个答案:

没有答案