如何以系统管理员身份运行存储过程?

发布于 2024-12-01 18:21:03 字数 1162 浏览 3 评论 0原文

我不想授予用户 Sysadmin 角色。 有没有办法以系统管理员或系统管理员用户身份运行特定的存储过程? 存储过程在MSSQL 2005中并且具有xp_cmdshell 下面是代码:

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 + '''')

I don't want to grant the user Sysadmin role.
Is there any way to run a specific stored procedure as Sysadmin or as a user that is sysadmin?
The stored procedure is in MSSQL 2005 and has xp_cmdshell
Below is the code:

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 + '''')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

掩耳倾听 2024-12-08 18:21:03
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

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

Test code

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

Additional info for gettting XP_CMDSHELL to work in SQL 2005

SQL 2005 XP_CMDSHELL

如果没有 2024-12-08 18:21:03

我删除了 EXECUTE AS 并添加了 EXEC sp_addsrvrolemember 'Corporate\HelenS', 'sysadmin'; 有效!然后我删除角色 EXEC sp_dropsrvrolemember 'Corporate\HelenS', 'sysadmin'

I removed EXECUTE AS and added EXEC sp_addsrvrolemember 'Corporate\HelenS', 'sysadmin'; Works! Then I drop the role EXEC sp_dropsrvrolemember 'Corporate\HelenS', 'sysadmin'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文