SQL Server存储过程可以执行比其调用者更高的权限吗?

时间:2013-04-12 20:26:31

标签: sql-server sql-server-2008-r2 database-permissions

我们的SQL Server数据库具有报告功能,允许调用者读取但不写入任何表,因为用户(或者更确切地说,由代表用户操作的Web应用程序打开的连接)仅具有数据库上的datareader权限。

我们希望能够编写一个存储过程,这是一个特殊的“清理报告”,它将在运行另一个报告之前清除旧缓存数据的数据库。我们希望上面的同一个只读用户能够运行这个存储过程。存储过程中的查询将执行DELETE操作,但我们不希望让用户能够通过调用此proc来删除任何内容。

我知道Module Signing,但希望避免处理证书的复杂性。

还有其他解决方案吗?如果这很重要,我们正在使用SQL标准身份验证。

2 个答案:

答案 0 :(得分:6)

CREATE PROCEDURE dbo.my_procedure
WITH EXECUTE AS OWNER
AS
BEGIN
  -- do your stuff here
END
GO
GRANT EXEC ON dbo.my_procedure TO [your_datareader_member];
GO

答案 1 :(得分:1)

授予执行该过程的权限将允许删除。

实际上这是一个非常相关的场景,限制了执行某些操作(例如删除)的能力。用户可能无法从随机表中删除随机行,但可以执行特定的目标删除过程。