我们的SQL Server数据库具有报告功能,允许调用者读取但不写入任何表,因为用户(或者更确切地说,由代表用户操作的Web应用程序打开的连接)仅具有数据库上的datareader权限。
我们希望能够编写一个存储过程,这是一个特殊的“清理报告”,它将在运行另一个报告之前清除旧缓存数据的数据库。我们希望上面的同一个只读用户能够运行这个存储过程。存储过程中的查询将执行DELETE操作,但我们不希望让用户能够通过调用此proc来删除任何内容。
我知道Module Signing,但希望避免处理证书的复杂性。
还有其他解决方案吗?如果这很重要,我们正在使用SQL标准身份验证。
答案 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)
授予执行该过程的权限将允许删除。
实际上这是一个非常相关的场景,限制了执行某些操作(例如删除)的能力。用户可能无法从随机表中删除随机行,但可以执行特定的目标删除过程。