2011-08-26 37 views
1

我不想授予用戶系統管理員角色。 是否有任何方式來運行特定的存儲過程作爲系統管理員或作爲系統管理員的用戶? 存儲過程是在2005年MSSQL和具有xp_cmdshell的 下面是代碼:如何以Sysadmin身份運行存儲過程?

ALTER PROCEDURE [dbo].[procExcelQuotebyItem] 
(
    @OrderNumber INT 
) 
AS 

BEGIN 
SET NOCOUNT ON 


DECLARE @Cmd varchar(1000) 
DECLARE @fn varchar(500) 
DECLARE @provider varchar(100) 
DECLARE @ExcelString varchar(100) 

-- New File Name to be created 
SET @fn = 'D:\Pre-Manufacturing\Excel\QuotebyItem.xls' 

/*Cleanup*/ 

SET @Cmd = 'DEL ' + @fn 
EXEC xp_cmdshell @Cmd, no_output 

-- FileCopy command string formation 
SET @Cmd = 'Copy D:\Pre-Manufacturing\Excel\QuotebyItemTemplate.xls ' + @fn 

-- FileCopy command execution through Shell Command 
EXEC MASTER..XP_CMDSHELL @cmd, NO_OUTPUT 

-- Mentioning the excel destination filename 
SET @provider = 'Microsoft.Jet.OLEDB.4.0' 
SET @ExcelString = 'Excel 8.0;Database=' + @fn 

EXEC('INSERT INTO OPENROWSET(''' + @provider + ''',''' + @ExcelString + ''',''SELECT * FROM [Sheet1$A2:L2]'') 
SELECT [ITEMNUMBER],'''',[ITEM_DESCRIPTION],[CASEPACK],[UNIT PRICE],[CASE PRICE],[WEIGHT],[CUBE],[CASE DIMS],[UPC],[CASE UPC],[Q Comments] FROM [ORDER SUMMERY] WHERE [Order #] = ''' + @OrderNumber + '''') 

回答

4
ALTER PROCEDURE dbo.usp_Demo 
WITH EXECUTE AS 'USER_ID_with_sysadmin_rights' 
AS 

http://msdn.microsoft.com/en-us/library/ms188354(v=SQL.90).aspx

測試代碼

CREATE PROCEDURE dbo.test1 
WITH EXECUTE AS 'CORP\jbooth' 
AS 
select user_name() 
GO 
EXEC test1 
GO 
ALTER PROCEDURE dbo.test1 
WITH EXECUTE AS 'dbo' 
AS 
select user_name() 
GO 
EXEC test1 

附加信息的流汗XP_CMDSHELL在SQL工作2005

SQL 2005 XP_CMDSHELL

+0

你測試過了嗎? –

+0

我添加了一個測試示例,但是我沒有安裝SQL 2005,只是2008年。我在2005版本中使用了這個功能,所以它應該可以正常工作... – Sparky

+0

據我記住用戶數據庫中的對象可以' t被賦予'EXEC AS'作爲服務器角色。你有沒有設法讓'xp_cmdshell'運行? –

0

我刪除了EXECUTE AS並添加了EXEC sp_addsrvrolemember 'Corporate\HelenS', 'sysadmin'; Works!然後我刪除角色EXEC sp_dropsrvrolemember 'Corporate\HelenS', 'sysadmin'

+0

我認爲,爲了添加一個服務器角色成員,調用存儲過程的用戶必須是db_owner和sys_admin,在這種情況下,您的sp應該已經爲該用戶工作。 – winnicki

+0

這造成了巨大的潛在安全漏洞,不應該成爲公認的答案。 – Hamster

相關問題