27,582
社区成员




USE tempdb
GO
-- 测试用户
CREATE LOGIN test
WITH PASSWORD = N'abc.124'
CREATE USER test
FOR LOGIN test
GO
-- 测试表
CREATE TABLE dbo.t1(
id int)
INSERT dbo.t1 VALUES(1)
CREATE TABLE dbo.t2(
id int)
INSERT dbo.t2 VALUES(2)
GO
-- 测试存储过程
CREATE PROC dbo.p
WITH EXECUTE AS 'dbo'
AS
SELECT SUSER_SNAME(), * FROM dbo.t2
GO
-- 授权
GRANT SELECT ON dbo.t1
TO test
GRANT EXECUTE on dbo.p
TO test
GO
-- 测试 (模拟 test 用户)
EXECUTE AS LOGIN = 'test'
GO
SELECT SUSER_SNAME(), * FROM dbo.t1
EXEC dbo.p
GO
-- 恢复
REVERT
GO
-- 删除测试
DROP PROC dbo.p
DROP TABLE dbo.t1, dbo.t2
DROP USER test
DROP LOGIN test