天天看點

Sqlserver資料庫中,跨權限執行語句

原文: Sqlserver資料庫中,跨權限執行語句

問題來源:最近有同僚需要執行批量删除語句。根據他提供的業務需求,推薦他使用“TRUNCATE TABLE”語句。但使用該語句需要 ALTER權限,這與執行使用者的角色不符。

解決辦法:使用EXECUTE AS語句修改執行權限。代碼如下:

ALTER PROCEDURE [dbo].[sp_TruncateTable] 
    @TableName varchar(200) 
    WITH EXECUTE AS SELF
AS 
BEGIN 
    --列印出目前執行上下文使用者
    SELECT  nt_username, loginame 
    FROM sys.sysprocesses 
    WHERE spid = @@SPID

    SET NOCOUNT ON; 
    DECLARE @TruncateSql nvarchar(2000);
    SET @TruncateSql = 'TRUNCATE TABLE ' + @TableName 
    EXEC (@TruncateSql) 
END      

通過列印出來的loginame可以看出,執行使用者資訊已經被修改。