3

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

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

我知道模块签名,但希望避免处理证书的复杂性。

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

4

2 回答 2

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
于 2013-04-12T20:30:17.117 回答
1

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

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

于 2013-04-12T20:30:52.260 回答