2010-08-03 168 views
0

請原諒我的荒謬愚蠢,我不知道這是否可能。安全的ODBC網絡連接到一個MS Access數據庫

這是情況。

有一個MS Access「數據庫」(是的,我知道,相信我,我知道),我需要從遠程位置選擇,更新和插入。問題是這需要安全地發生。

我可以完全控制託管MS Access文件的遠程機器,所以我可以隨心所欲地安裝驅動程序和軟件。服務器是Microsoft Windows Server 2003.

我打算採用的方法是在HTTPS服務器上託管PHP腳本(使用Apache或IIS,無關緊要),將XML發送到PHP腳本然後在MS Access數據庫上做它的事情併發回XML結果。但是,由於時間限制,我試圖找出是否可以通過ODBC以安全的方式直接連接,並讓它與MS Access數據庫對話。

我的理解是,ODBC並不完全以安全着名,但有支持加密連接的ODBC驅動程序,或者我可以以某種方式通過SSL隧道ODBC連接。但是,迄今爲止我發現的所有信息都依賴於數據庫是Microsoft SQL。

特別是我對如果有辦法通過SSL-ify ODBC連接而不考慮底層數據庫感興趣。我可以自己弄清楚Unix-clone,但主機是Windows Server 2003,在這種情況下,我不知道如何繼續。

這可能嗎?任何信息高度讚賞!

+0

可能會感興趣:http://www.litwindow。com/Knowhow/HowTo/howto_create_secure_access_dat.html – 2010-08-03 23:15:23

回答

1

這裏的問題是你不太瞭解ODBC連接如何與訪問一起工作。我們不是在這裏談論TC/IP或基於連接的連接。

如果您查看任何JET訪問文件的連接字符串,您會在ODBC連接中看到始終,我反覆總是包含一個完全限定的Windows路徑名。當我說完全限定的Windows路徑名時,我正在談論一個坐在硬盤上的文件。

在一天結束時,我們正在討論如何打開一個簡單的Jane窗口文件。一匹馬是一匹馬是一匹馬,一個Windows文件是一個Windows文件,是一個Windows文件。

換句話說,我們正在討論打開坐在硬盤上的文件。因此,整個過程與打開excel文件,文本文件,PowerPoint文件,或者在這種情況下訪問文件恰好位於硬盤上沒有任何不同。

有沒有服務器或特定的數據庫軟件EVER必須安裝在該文件設置的計算機上。客戶端必須具有該軟件並執行標準的Windows文件打開命令才能將數據從磁盤驅動器中取出。記住,當你在服務器上放置一個word文件並打開它時,你永遠不需要在服務器上安裝word,是打開windows標準文件的客戶端,當打開訪問文件時,JET完全相同。

這意味着如果你打算通過互聯網連接打開這個文件,那麼你必須通過互聯網擴展windows網絡。 HTTP甚至FTP都不是遠程接近Windows文件聯網協議。

但是,您可以通過Internet擴展Windows聯網系統,這通常是通過稱爲VPN(虛擬專用網絡)完成的。這意味着你必須建立一個VPN。這樣可以讓你通過網絡鄰居看到另一臺計算機,並瀏覽到服務器上該文件夾上的文件,然後打開它。再次打開一個標準的Windows文件,服務器上沒有運行某種類型的服務,您可以使用它連接到SQL服務器。

你可以閱讀我的下面的文章,我解釋了爲什麼在互聯網上與Windows網絡和JET(訪問)文件根本不會在一個可靠的方式工作運行的VPN:

http://www.members.shaw.ca/AlbertKallal//Wan/Wans.html

所以,請記住,如果您查看任何JET ODBC連接字符串,您會注意到它從來不是基於IP的,但必須是完全符合條件的標準Windows文件名。我不能再重複一遍,我們討論的是我們要打開的標準Windows文件名和位置。

請記住,這與打開word或excel或PowerPoint沒有任何區別。 ODBC驅動程序混淆了這個問題,因爲驅動程序只需要在客戶端進行安裝和設置,除了打開標準的簡單窗口文件所需的功能之外,服務器端沒有任何連接。

你對VPN的要求是什麼,但不切合實際。你可以閱讀上面的文章,並詳細解釋了爲什麼這不能可靠地工作和功能。

隨着SQL服務器的多個免費版本的出現,以及其他許多選擇,上述限制對您而言可能不會成爲問題。這些其他服務器數據庫系統不是基於文件的,並且您的連接字符串永遠不會解析爲某個文件名。因此,這些數據庫服務器也不需要Windows網絡協議來打開該文件,因此您甚至可以連接到運行Linux等服務器,甚至沒有安裝Windows網絡。對於噴射連接,您必須使用Windows網絡直接打開文件。

+0

簡而言之,無法使用Jet/ACE遠程安全地使用ODBC,並且必須有一箇中間層(例如PHP)來保護數據。 – 2010-08-06 18:02:40

+0

好的,我相信你,但我想明白這一點,我不太確定我是否明白這一點。首先,我完全理解,ODBC只是將Access數據庫作爲文件打開,而不是通過TCP/IP打開。我不關心從ODBC到Access的連接。他們在同一個主機上。 我* *關心的是從我的程序到ODBC的連接。 我的印象是,ODBC可以遠程連接,並且底層數據源無關緊要。當我連接到ODBC時,我不必指定文件名,我只是指定ODBC數據源名稱。 – Teekin 2010-08-06 20:42:35

+0

我想什麼阻止我清楚地理解這一點,是否如果客戶端(我會說「連接到ODBC」這可能是錯誤的術語)需要訪問Access文件本身...爲什麼會有人想要使用ODBC用於連接到MS Access文件?爲什麼首先有MS Access的ODBC驅動程序?感謝Albert的迴應! – Teekin 2010-08-06 20:51:11

1

通常會在客戶端和數據庫之間放置一箇中介。中介處理認證,授權,安全數據傳輸等。假定數據庫位於防火牆內部,處於安全區域。所有您想要添加的事情都是爲防火牆外的客戶端安全保護,由中間人來處理。

作爲一名Java人員,我會自動將Web客戶端與一個或多個servlet進行對話。讓servlet處理認證和授權。 HTTP意味着不需要防火牆。你也可以使用HTTPS。

我認爲這會更容易實施。此外,即使SSL連接的ODBC連接仍會將數據庫暴露給更廣泛的Internet。我不希望我的數據在這樣的存儲庫中。你會?

+0

嗯,是的,這是PHP方法的最初想法,有一箇中介。這就是我們仍然可以做的,但是如果我們只需要SSL連接,那就足夠了。我們將有一個只允許特定IP連接的防火牆,通過SSL,遠程服務器的身份將得到保護並加密,我們認爲這對我們來說已經足夠了。但是,如果事實證明這是不可能或無法實現的,那麼中間步驟就是我們將要做的事情。感謝您的意見。 – Teekin 2010-08-03 23:16:21

+0

+1!如果沒有中間層,客戶端必須有文件系統訪問(赦免雙關語)Access文件。中間層防止直接用戶篡改文件。 – kbrimington 2010-08-03 23:18:18

0

爲什麼您的MS-Access(真正的MS-Jet)數據庫只有一個文件?
我無法想象。如果它不是一個ODBC數據庫,那麼我可以描繪它。 大多數MS-Jet ODBC數據庫都有100個* .MDB文件,其中每個MDB文件都是作爲單個表,一組表或分表在邏輯上和物理上分散的(不是分割的)沒有鏈接)跨越數十或數百個MDB文件。沒有任何MDB文件本身被視爲數據庫。 這就是我看到的使用MS-Access驅動程序和MS-Jet引擎構建的ODBC數據庫的方法。 大多數ODBC MS-Jet/MS-Access驅動程序數據庫大約有50億行和1太字節大小。

+0

這是很多年前,所以我的記憶是模糊的。如果我沒有記錯,客戶端在MS Access文件中使用各種形式和東西。他希望將這些信息在他本地的「數據庫」(文件)中複製到一個網站,或者發送到某個地方或什麼東西。我不記得具體細節,但這是我正在從事的其他人的一個項目,沒有控制技術設計。我永遠不會用這種方式設計這個過程,也不會首先選擇這種技術。但是你知道,客戶統治所有,他們說。我不會捍衛這個設計。 – Teekin 2017-06-15 14:34:21

+0

MS-Access完全能夠在一個mdb中擁有所有內容,如果將其分割爲更多的內容,而不是因爲您選擇這樣做(如果需要鏈接不同mdb中的多個表,則不是最佳選擇)。每個mdb只是一個數據庫,就像一個真正的MS-SQL服務器一樣,它可以有多個數據庫(並且每個數據庫下面有一個文件)。所以一個MDB文件不僅被認爲是一個數據庫,它實際上是一個數據庫。 – SuperDre 2017-09-04 15:22:33

相關問題