[SQL SERVER][TS]解決 sp_OACreate 權限問題

[SQL SERVER][TS]解決 sp_OACreate 權限問題

網友問題,紀錄一下解決過程。

很久之前我有透過 Ole Automation Procedures建立 Filesystemobject,

當時執行 EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT我也記得有遇過,

不過年紀大了就忘記當時怎麼解決的,

因為安全性問題,所以當初執行完後就會關閉 Ole Automation Procedures,

今天想說開啟 Ole Automation Procedures並用sysadmin role應該就沒問題,

沒想到我也遇到存取被拒的問題,

紀錄一下整各解決過程。

 

如果你沒有啟用 Ole Automation Procedures就會得到下面錯誤訊息

image

 

先用sysadmin角色中成員登入

SELECT    name,Sid,type_desc,        
        IS_SRVROLEMEMBER('sysadmin', name)    AS    IsSysAdmin
FROM    sys.server_principals p
where name='---\---Chen'
image 

 

 

執行 sp_OACreate 'Word.Document'

DECLARE @hr INT
DECLARE @retval INT
EXEC @hr=sp_OACreate 'Word.Document', @retval output
print @hr

 

image

 

既然沒有權限,那就要檢查是那裡沒有權限,

基本上SQL SERVER執行相關元件都透過 SQL Server Service Account,

所以我查看sqluser是否有執行該元件權限。

image

 

開啟元件服務(DCOMCNFG)

image

選擇內容

 

切到 COM安全設定頁籤

image

啟動和啟用權限->編輯預設值

 

image

可以看到少了 sqluser(應該是當時我關閉 Ole Automation Procedures 就順便移除相關權限了)

 

新增sqluser啟動和啟用權限

image

如果你是遠端的話,請勾選遠端(我這裡都是本機執行)。

 

再次執行sp_OACreate 'Word.Document'

image

這樣就成功了。

 

 

 

參考

[SQL SERVER][TSQL]匯出Store Procedure內容並存成檔案