Sql-Server

如何使用 Microsoft.ACE.OLEDB.12.0 作為 SQL Server 2012 中的連結伺服器更新/刪除/插入?

  • January 16, 2015

我需要使用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文件夾。

引用自:https://dba.stackexchange.com/questions/83211