0
我試圖在存儲過程中打開xlsx文件。當我在執行過程中的架構的應用程序,但執行的DBO:存儲過程中的「執行」不適用於「OPENROWSET」
ALTER PROCEDURE [app].[Compare] (
@p_CPN_ID int,
@p_FILE_LOCATION nvarchar(max)
)
WITH EXECUTE AS 'dbo'
AS
BEGIN
BEGIN TRY
DELETE FROM dbo.IMPORT
DECLARE @v_OPEN_ROWSET NVARCHAR(MAX)
SET @v_OPEN_ROWSET = 'INSERT INTO dbo.IMPORT
SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 8.0;HDR=YES;Database=' + @p_FILE_LOCATION + ''',''select * from [Arkusz1$]'')'
EXECUTE sp_executesql @SQLString = @v_OPEN_ROWSET
END TRY
BEGIN CATCH
declare @err nvarchar(max)
set @err = ERROR_MESSAGE()
RAISERROR(@err,16,1)
RETURN 1
END CATCH
END
我得到這個錯誤:
Access to the remote server is denied because the current security context is not trusted.
,但過程中的dbo架構沒有「執行爲DBO」完美的作品精細。爲什麼?
'dbo'在數據庫本身內具有無限制的權限。然而,你不是試圖訪問數據庫中的數據,也不是SQL服務器中的數據。所以,在SQL服務器上的權限是沒有關係的。希望執行上述操作的人員必須擁有SQL服務器之外的權限(即使該文件位於同一臺機器/物理計算機上)以訪問「@ p_FILE_LOCATION」。 'dbo'是一個只有SQL服務器才知道的系統帳戶,但不在Windows之外。但是Windows(!)是處理'@ p_FILE_LOCATION'權限的人。 – Ralph
簡而言之:Windows(可能是活動目錄)必須信任SQL,並且SQL帳戶必須具有Windows文件系統內SQL以外的適當權限。 – Ralph