[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就會得到下面錯誤訊息
先用sysadmin角色中成員登入
SELECT name,Sid,type_desc,
IS_SRVROLEMEMBER('sysadmin', name) AS IsSysAdmin
FROM sys.server_principals p
where name='---\---Chen'
執行 sp_OACreate 'Word.Document'
DECLARE @hr INT
DECLARE @retval INT
EXEC @hr=sp_OACreate 'Word.Document', @retval output
print @hr
既然沒有權限,那就要檢查是那裡沒有權限,
基本上SQL SERVER執行相關元件都透過 SQL Server Service Account,
所以我查看sqluser是否有執行該元件權限。
開啟元件服務(DCOMCNFG)
選擇內容
切到 COM安全設定頁籤
啟動和啟用權限->編輯預設值
可以看到少了 sqluser(應該是當時我關閉 Ole Automation Procedures 就順便移除相關權限了)
新增sqluser啟動和啟用權限
如果你是遠端的話,請勾選遠端(我這裡都是本機執行)。
再次執行sp_OACreate 'Word.Document'
這樣就成功了。
參考