我有一个带有应用程序角色的数据库。所有角色成员都属于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权限。”
我是否能让我的用户成功执行此过程,而不必给予该角色对动态SQL中所有视图的权限?