Sql server 如何临时将sysadmin授予用户?

Sql server 如何临时将sysadmin授予用户?,sql-server,stored-procedures,Sql Server,Stored Procedures,下面的代码位于存储过程中,在用户下运行时出现以下错误:premfguser。 对远程服务器的访问被拒绝,因为当前安全上下文不受信任 SET @provider = 'Microsoft.Jet.OLEDB.4.0' SET @ExcelString = 'Excel 8.0;Database=' + @fn EXEC('INSERT INTO OPENROWSET(''' + @provider + ''',''' + @ExcelString + ''',''SELECT * FROM [S

下面的代码位于存储过程中,在用户下运行时出现以下错误:premfguser。 对远程服务器的访问被拒绝,因为当前安全上下文不受信任

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

当我将premfguser添加到sysadmin时,它可以工作。如何在不将sysadmin永久授予用户的情况下运行此代码

定义存储过程时,添加
executeas
子句:

CREATE PROCEDURE SomeProcedure
WITH EXECUTE AS 'UserName'
AS BEGIN
  -- procedure code as usual...
END;

使用EXECUTE AS并使用证书对过程进行签名。有关如何签署程序的信息,请参见本文和本文


请注意,将数据库标记为可信的替代方法意味着数据库的
dbo
实际上是一个
sysadmin
,因为如果设置了可信位,他可以随时将自己升级到sysadmin。代码签名是一种更好的选择,尽管要复杂得多。

我试过了。用户名具有sysadmin角色。我收到以下错误:
对远程服务器的访问被拒绝,因为当前安全上下文不受信任