首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 連接加密 Access (MDB) 資料庫:OPENROWSET / OPENDATASOURCE / Linked Server 完整實作

     編輯:關於SqlServer

破解「密碼保護的 Access 無法連結」難題

SQL Server 原生支援透過 OLE DB 存取 Access (Jet/ACE),但官方文件鮮少說明密碼參數寫法。本文實測三種連接方式在 **有資料庫密碼** 情況下的正確連接字串語法,並解析關鍵屬性 Jet OLEDB:Database Password 與 pwd 的差異。

一、核心屬性對照

方式密碼關鍵字屬性集備註
OPENROWSETpwd=密碼ODBC 風格Provider String 參數中直接加 ;pwd=xxx
OPENDATASOURCEJet OLEDB:Database Password=密碼OLE DB 初始化屬性Init String 使用標準 OLE DB 關鍵字
Linked Server@provstr = ';pwd=密碼'Provider Stringsp_addlinkedserver 的 @provstr 參數

二、完整可執行範例(假設 C:\data\abc.mdb,密碼 test)

1. OPENROWSET(臨時查詢/更新)

-- 查詢
SELECT * FROM OPENROWSET(
    'Microsoft.Jet.OLEDB.4.0',
    ';database=C:\data\abc.mdb;pwd=test',
    'SELECT * FROM student WHERE id = 1'
);

-- 更新
UPDATE OPENROWSET(
    'Microsoft.Jet.OLEDB.4.0',
    ';database=C:\data\abc.mdb;pwd=test',
    'SELECT * FROM student WHERE id = 1'
) SET name = '張三';

2. OPENDATASOURCE(臨時查詢/更新,四部份命名)

SELECT * FROM OPENDATASOURCE(
    'Microsoft.Jet.OLEDB.4.0',
    'Data Source=C:\data\abc.mdb;Jet OLEDB:Database Password=test'
)...student;

UPDATE OPENDATASOURCE(
    'Microsoft.Jet.OLEDB.4.0',
    'Data Source=C:\data\abc.mdb;Jet OLEDB:Database Password=test'
)...student SET name = '張三' WHERE id = 1;

3. Linked Server(持久化、可重複使用)

EXEC sp_addlinkedserver
    @server = N'ACC_LINK',
    @provider = N'Microsoft.Jet.OLEDB.4.0',
    @srvproduct = N'OLE DB Provider for Jet',
    @datasrc = N'C:\data\abc.mdb',
    @provstr = N';pwd=test';  -- 關鍵:Provider String 帶入密碼

EXEC sp_addlinkedsrvlogin 'ACC_LINK', FALSE, NULL, NULL, NULL;  -- 使用預設安全性上下文

-- 之後即可像本地表一樣操作
SELECT * FROM ACC_LINK...student WHERE id = 1;
UPDATE ACC_LINK...student SET name = '張三' WHERE id = 1;

三、64 位元環境注意事項

  • 64 位 SQL Server **無法** 載入 32 位 Microsoft.Jet.OLEDB.4.0。
  • 必須安裝 **Microsoft Access Database Engine 2010/2016 Redistributable (64-bit)**,改用 Provider Microsoft.ACE.OLEDB.12.0 或 16.0。
  • 連接字串同樣支援 Jet OLEDB:Database Password / pwd。

四、常見錯誤排查

五、安全性建議

  1. 避免在連接字串明文寫死密碼 → 使用 Linked Server + sp_addlinkedsrvlogin 指定專用登入帳號。
  2. Access 檔案本身加密(Database Password)僅防誤開,**非高強度加密**,敏感資料請遷移至 SQL Server 本地表。
  3. 定期稽核 sys.linked_logins 與 sys.servers。

總結

掌握 pwd (OPENROWSET/Linked Server) 與 Jet OLEDB:Database Password (OPENDATASOURCE) 兩組關鍵字,即可在 SQL Server 透明存取加密 Access。64 位環境請務必改用 ACE Provider。建議將遷移腳本化、參數化,納入 CI/CD 流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤訊息原因解決
Cannot initialize the data source object路徑錯誤/權限不足/Provider 未註冊確認檔案路徑、SQL Server 服務帳號讀取權限、安裝 ACE 64-bit
Not a valid password密碼關鍵字拼錯/編碼問題依上表對應方式修正關鍵字
Provider cannot be found32/64 位不匹配安裝對應位數 ACE Provider