Sql-Server
如何使用 Microsoft.ACE.OLEDB.12.0 作為 SQL Server 2012 中的連結伺服器更新/刪除/插入?
我需要使用Microsoft.ACE.OLEDB.12.0 提供程序從SQL Server 2012更新Access 2003數據庫。作為管理員,一切都很好。我可以毫無問題地在 Access 數據庫上執行 Select、Insert、Update 和 Delete 語句,但是當我使用非管理員使用者時,我只能執行 Select 查詢。插入、更新和刪除查詢不起作用,我收到以下錯誤消息:
當我使用SQL Server 登錄時出現錯誤消息:
無法針對連結伺服器“AccessFileTest”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”執行查詢“SELECT * FROM inv_lign”。提供程序不支持 UPDATE/DELETE/INSERT 語句所需的介面。提供程序指示與其他屬性或要求發生衝突。
這是查詢:
DELETE FROM OPENQUERY(AccessFileTest, 'SELECT * FROM inv_lign')
我也嘗試了 4 部分查詢但沒有成功:
DELETE AccessFileTest...inv_lign;
以下是 Microsoft.ACE.OLEDB.12.0 提供程序的配置方式:
- 動態參數 = true
- 允許程序內 = true
- 在系統資料庫中添加鍵 DisallowAdHocAccess = 0
以下是連結伺服器 AccessFileTest 的配置方式:
- 在“安全”選項卡中,我選擇了“使用此安全上下文進行製作”
- 遠端登錄是“admin”,沒有任何密碼
那麼如何使用 Microsoft.ACE.OLEDB.12.0 提供程序對 Access 2003 數據庫執行插入/更新/刪除語句?
到目前為止我已經嘗試過:
- 只有當我使用的 AD 使用者不是 SQL Server 的系統管理員但他是我的伺服器的管理員時,我才能使它工作。如果使用者不是伺服器的管理員,我會收到錯誤消息
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
。然後,我嘗試僅添加此使用者以對 TEMP 文件夾和 Access 文件具有權限,但未成功。所以我不知道我必須給予什麼特殊權利才能與 AD 使用者一起工作。- 如果我使用 SQL Server 登錄,我會收到如前所述的錯誤消息。
問題來自儲存 Access 文件的伺服器上的權限不足。以下是根據您使用的登錄類型配置伺服器的方法:
如果您使用SQL Server 登錄:
- 授予SQL Server 數據庫引擎服務帳戶權限以對 Access 文件所在的文件夾進行讀取和寫入(取決於您是否要對該文件進行 CRUD)。
如果您使用的是Windows 身份驗證登錄:
授予此使用者登錄權限以讀取和寫入:
- 在 Access 文件所在的文件夾上。
- 在SQL Server 數據庫引擎使用者帳戶的**temp 文件夾上。**例如,如果 SQL Server 數據庫引擎服務帳戶為 domain\sqlEngSvc,則應將讀/寫權限設置為C:\Users\sqlEngSvc\AppData\Local\Temp文件夾。