Sql server 2005 如何以Sysadmin的身份运行存储过程?
我不想授予用户Sysadmin角色。 有没有办法以Sysadmin或Sysadmin用户的身份运行特定的存储过程? 该存储过程位于MSSQL 2005中,并具有xp_cmdshell 代码如下: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
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应该已经为该用户工作。这会造成一个巨大的潜在安全漏洞,不应该是一个可接受的答案。