Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何以Sysadmin的身份运行存储过程?_Sql Server 2005_Stored Procedures_Xp Cmdshell - Fatal编程技术网

Sql server 2005 如何以Sysadmin的身份运行存储过程?

Sql server 2005 如何以Sysadmin的身份运行存储过程?,sql-server-2005,stored-procedures,xp-cmdshell,Sql Server 2005,Stored Procedures,Xp Cmdshell,我不想授予用户Sysadmin角色。 有没有办法以Sysadmin或Sysadmin用户的身份运行特定的存储过程? 该存储过程位于MSSQL 2005中,并具有xp_cmdshell 代码如下: ALTER PROCEDURE [dbo].[procExcelQuotebyItem] ( @OrderNumber INT ) AS BEGIN SET NOCOUNT ON DECLARE @Cmd varchar(1000) DECLARE @fn varchar(500) DE

我不想授予用户Sysadmin角色。 有没有办法以Sysadmin或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 + '''')

测试代码

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\U CMDSHELL以在SQL 2005中工作的其他信息

测试代码

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\U CMDSHELL以在SQL 2005中工作的其他信息


我删除了EXECUTE AS并添加了
EXEC sp_addsrvrolemember'Corporate\HelenS'、'sysadmin'工作!然后我删除了角色EXEC sp_dropsrvrolemember'Corporate\HelenS','sysadmin'
我删除了executeas并添加了
EXEC sp_addsrvrolemember'Corporate\HelenS','sysadmin'工作!然后我删除了角色EXEC sp_dropsrvrolemember'Corporate\HelenS','sysadmin'

我添加了一个小测试示例,但是我没有安装SQL 2005,只安装了2008。我确实在2005版中使用了这个,所以它应该可以正常工作……据我记忆所及,用户数据库中的对象不能被赋予
EXEC作为服务器角色。您是否已成功运行
xp\u cmdshell
?可能是类似的权限问题,我使用SQL 2005已经有一段时间了,我可以看到安全隐患。最坏的情况是,我猜他需要创建一个具有所需权限的用户,并将过程分配给该用户。我认为他的问题是为了这个,一个拥有系统管理员权限的用户。。(我将修改示例以使其更清晰)感谢您的提醒…Msg 15151,级别16,状态1,过程procExcelQuotebyItem,第49行无法以用户“sysadmin”的身份执行,因为它不存在或您没有权限。我将执行更改为“domain\user”,并给出以下错误:
Msg 229,级别14,状态5,过程xp_cmdshell,第1行对对象“xp_cmdshell”、数据库“mssqlsystemresource”、架构“sys”的执行权限被拒绝。
和:
Msg 15274,级别16,状态1,第1行对远程服务器的访问被拒绝,因为当前的安全上下文不受信任。
我添加了一个小测试示例,但是,我没有安装SQL2005,只是安装了2008。我确实在2005版中使用了这个,所以它应该可以正常工作……据我记忆所及,用户数据库中的对象不能被赋予
EXEC作为服务器角色。您是否已成功运行
xp\u cmdshell
?可能是类似的权限问题,我使用SQL 2005已经有一段时间了,我可以看到安全隐患。最坏的情况是,我猜他需要创建一个具有所需权限的用户,并将过程分配给该用户。我认为他的问题是为了这个,一个拥有系统管理员权限的用户。。(我将修改示例以使其更清晰)感谢您的提醒…Msg 15151,级别16,状态1,过程procExcelQuotebyItem,第49行无法以用户“sysadmin”的身份执行,因为它不存在或您没有权限。我将执行更改为“domain\user”,并给出以下错误:
Msg 229,级别14,状态5,过程xp_cmdshell,第1行对对象“xp_cmdshell”、数据库“mssqlsystemresource”、架构“sys”的执行权限被拒绝。
和:
Msg 15274,级别16,状态1,第1行对远程服务器的访问被拒绝,因为当前的安全上下文不受信任。
我认为为了添加服务器角色成员,调用存储过程的用户必须是db_所有者和sys_管理员,在这种情况下,您的sp应该已经为该用户工作。这会造成一个巨大的潜在安全漏洞,不应该是可接受的答案。我认为,为了添加服务器角色成员,调用存储过程的用户必须是db_所有者和sys_管理员,在这种情况下,您的sp应该已经为该用户工作。这会造成一个巨大的潜在安全漏洞,不应该是一个可接受的答案。