Thi*_*ost 1 sql t-sql sql-server
给定一个简化的存储过程
CREATE OR ALTER PROCEDURE [FooSchema].[Foo]
AS
SELECT
B.*,
FROM [BarSchema].[Bar] AS B
WHERE [...]
Run Code Online (Sandbox Code Playgroud)
将 EXEC 授予 FooSchema 上的用户而不是 BarSchema 上的用户后,此存储过程将失败并显示消息
The SELECT permission was denied on the object 'Bar',
Run Code Online (Sandbox Code Playgroud)
有没有办法让用户访问 [FooSchema].[Foo] 而不暴露 [BarSchema].[Bar] 的整个数据集,因为存储过程已经过滤掉了与该用户相关的数据。
最简单的选择是使用[WITH EXECUTE AS]语句,其中指定的用户名具有相关对象所需的确切权限。
CREATE OR ALTER PROCEDURE [FooSchema].[Foo]
WITH EXECUTE AS '<username>'
AS
SELECT
B.*,
FROM [BarSchema].[Bar] AS B
WHERE [...]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |