有一個存儲過程執行動態查詢,該動態查詢將來自參數。動態查詢大多隻包含SELECT語句,但可能包含刪除/更新一段時間。防止在具有動態查詢的存儲過程中更新/刪除
我想在此過程嘗試運行具有DELETE或UPDATE命令的動態查詢時引發錯誤。 如..
create procedure spa_test
@sql varchar(2000)
AS
EXEC(@sql)
go
----------------------
SET @sql1 = ' DELETE FROM data_table where .... ;
.........
SELECT * FROM some_table .. '
SET @sql2 = '....
.........
SELECT * FROM some_table '
EXEC spa_test @sql1 -- should result in error
EXEC spa_test @sql2 -- no error and procedure runs successfully
我可以通過使用SQL Server策略管理做到這一點? 我不能改變這個過程spa_test,並且不能改變用戶運行它的權限。 有沒有其他方法可以完成這個需求?
你可以添加自己的SP,將spa_test之前運行,提高錯誤? – cha
或重命名真正的'spa_test'並將其包裝在一個執行檢查的新'spa_test' proc中(例如根據@ mhasan的回答) – StuartLC
使您的表只讀,因此沒有人可以更新或刪除記錄...而不更改SP這是我在SQL Server中知道的唯一方法 –