微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用动态SQL的存储过程中的SQL Server权限

如何解决使用动态SQL的存储过程中的SQL Server权限

是的。

向该过程中添加EXECUTE AS CALLER子句,然后对存储过程进行 签名 ,并向 签名 授予所需的权限。这是100%安全,可靠和防弹的。请参阅带有证书的签名过程

解决方法

我有一个具有应用程序角色的数据库。角色成员都属于Active
Directory中的组。我没有给角色授予从表中进行选择的权限,而是给角色赋予了对它需要调用的所有存储过程的执行权限。

除了我的存储过程之一,该过程可以建立一些动态SQL并调用sp_executesql之外,其他方法都可以正常工作。

动态sql看起来像这样:

SET @SQL = N'
SELECT * 
FROM dbo.uvView1 
INNER JOIN uvView2 ON uvView1.Id = uvView2.Id'

EXEC sp_executesql @SQL

具有此角色的用户无法调用存储过程。它给出了以下错误,这是我所预期的:

对对象“ uvView1”,数据库“ Foobar”,模式“ dbo”的SELECT权限被拒绝。

有没有一种方法可以让我的用户成功执行此proc而不给动态SQL中的所有视图授予角色权限?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。