【问题标题】:SELECT permission was denied on the object对象的 SELECT 权限被拒绝
【发布时间】:2010-09-25 11:28:26
【问题描述】:

如果在 SqlServer 中创建了一个自定义角色,我将其添加到 db__denydatareader 和 db__denydatawriter 角色中。我认为通过 db 并授予所有 neccersary 存储过程的 exec 权限。

一切正常,调用这些 sps 将正常运行。一个例外是使用 sp_executesql 执行动态 sql 的存储过程。这失败了

The SELECT permission was denied on the object 'listing_counter', database 'Cannla', schema 'dbo'.

有没有什么方法可以授予角色运行此查询的权限,而不授予它对基础表的选择访问权限?

我想我想做的是在 sys.sp_executesql 上授予 exec,但仅限于特定情况。

【问题讨论】:

    标签: sql-server security roles


    【解决方案1】:

    为此使用以下语句。它对我有用。

    sp_addlinkedserver [ @server= ] '服务器' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ]

     [ , [ @datasrc= ] 'data_source' ] 
     [ , [ @location= ] 'location' ] 
     [ , [ @provstr= ] 'provider_string' ] 
     [ , [ @catalog= ] 'catalog' ] 
    

    【讨论】:

      【解决方案2】:

      您可以仅为使用 execute_sql 的存储过程创建一个新用户,授予他所需的权限,然后将 WITH EXECUTE AS 'MyUser' 添加到过程定义中。 See MSDN.

      【讨论】:

      • 谢谢!在互联网上,我正在阅读有关签署证书和其他矫枉过正的信息。我所需要的只是使用 db_datareader 数据库角色添加一个登录名。现在我可以通过在存储过程定义中添加“WITH EXECUTE AS 'DataReaderOnlyUser'”,让我的 asp.net 登录运行使用 sp_executesql 的存储过程。
      猜你喜欢
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 2017-11-04
      • 2012-11-03
      • 1970-01-01
      • 2011-03-27
      相关资源
      最近更新 更多