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

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

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

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

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

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

最佳答案

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

关于sql-server - SQL Server 存储过程可以以比其调用者更高的权限执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980286/

相关文章:

c# - 将大插入作为表值参数或作为字符串插入语句传递给 SQL Server 更好吗?

sql-server - 恢复数据库 SQL Server - 数据为空,不能对空值调用此方法或属性

java - 在 Microsoft sql server 中将不同的表连接/附加在一起

sql-server-2008-r2 - SQL Server 2008 R2 Express : Management Tools Missing from Feature Selection

sql-server - 导入 Access .mdb 时 SQL Server 导入向导 "workgroup information file"错误

asp.net - ASP.NET 和 SQL Server 2008 中的错误 "Login failed for user ' NT AUTHORITY\IUSR'"

php - 一般错误 : 1 Can't create/write to file errcode:2

oracle - 如何检查哪些模式已被授予对 Oracle 对象的 EXECUTE 权限?

sql-server - 如何在不丢失数据的情况下更改SQL Server数据库中的列数据类型?

sql-server - T-SQL : Converting NTEXT to VARCHAR to INT/BIGINT