2011-02-15 15 views
1

我的詩情:如何確保其他方式的數據庫流量,也就是說,從客戶端到服務器

我試圖開發一種將查詢不同的數據庫服務。

要清除上面的語句了:

  1. 我使用最廣泛的意義這個詞的服務:一個sofware組件,將提供一定的參考價值的數據庫所有者。

  2. 這些數據庫將不受我的控制,因爲它們將屬於不同的公司。他們不會事先知道,並且需要支持多個供應商:Oracle,MS(SQL Server),MySql,PostgreSQL。此外,將支持OLE DB和ODBC連接。

問題:數據庫憑據和整體交通的安全是一個大問題,但是配置工作至少應減少。理想情況下,應該在服務實現中以編程方式解決所有安全問題,並且除了提供有效的連接字符串之外,不需要數據庫所有者的配置工作。

通常,數據庫SSL支持是通過服務器證書完成的,我想避免這種情況,因爲這對客戶端(數據庫所有者)來說很麻煩。 我一直在研究如何做到這一點無濟於事。希望這可以通過openssl,SSPI,客戶端SSL證書或任何形式的隧道來完成;或者可能僅僅是不可能的。一些建議將會大大提高。

回答

0

即使在嘗試使用數據庫保護通信之前,對於數據庫所有者而言,如何在不對數據庫所有者造成極大麻煩的情況下理解此服務的工作方式,我有點困難。

以Oracle爲例(雖然我認爲會有類似的問題與其他數據庫)。爲了讓您的服務訪問Oracle數據庫,數據庫所有者必須在其防火牆中打開一個洞,以允許您的服務器訪問特定端口上的數據庫,以便他們需要知道IP地址的服務器,並且很有可能他們需要配置一個在單個端口上完成所有通信的服務(默認情況下,Oracle監聽器會頻繁地將客戶端重定向到不同的端口以便與數據庫實際交互)。如果他們完全是安全意識的,他們將不得不在獨立的機器上安裝Oracle Connection Manager來代理服務器和數據庫之間的連接,而不是將數據庫直接暴露給互聯網。這是相當多的內部需要的配置工作,假設數據庫帳戶已經存在具有適當的權限,並且每個人都簽署了從防火牆外部授予數據庫訪問權限。

如果您希望加密與數據庫的通信,則需要建立到數據庫所有者網絡的VPN連接(這可能會消除一些防火牆問題),或者您需要使用類似於Oracle高級安全性來加密您的服務器之間的通信。創建到許多不同客戶網絡的VPN連接需要潛在的巨大配置工作量,並且可能要求您爲每個客戶維護一臺服務器,因爲不同的客戶將有不同的VPN軟件需求,這些需求可能互不兼容。高級安全選項是企業版Oracle許可證之上的額外成本許可證,客戶不得不出去購買(而且價格也不便宜)。一旦所有這些其他環節被跳過,你只會擔心獲得適當的SSL證書。 SSL證書交換似乎是整個流程中最簡單的部分。

而這只是爲了支持Oracle。對其他數據庫的支持將涉及一系列類似的步驟,但確切的過程往往略有不同。

我往往會想到你會得到更好的服務,這取決於你試圖解決的業務問題,通過創建你的客戶可以安裝其網絡內自己的服務器上,將連接到產品數據庫,並有一個接口,可以通過類似HTTPS POST調用的方式將數據發送到中央服務器,也可以監聽可發送到數據庫的HTTPS請求,並通過HTTP返回結果。

0

SSL對於保持客戶端數據庫安全非常重要。但不止於此。您必須確保每個數據庫帳戶都被鎖定。每個客戶端只能訪問他們自己的數據庫。而且,每個數據庫都有其他的特權,這些特權是令人討厭的例如MySQL有FILE_PRIV,它允許帳戶讀/寫文件。 MS-SQL有xp_cmdshell,它允許用戶從sql訪問cmd.exe(他們爲什麼要這麼做!?)。 PostgreSQL允許你用任何語言編寫存儲過程,然後你可以調用各種令人討厭的函數。

然後,還有其他問題。格式錯誤的查詢可能會導致緩衝區溢出,從而給攻擊者帶來王國的密鑰。你必須確保你的所有數據庫都是最新的,然後祈禱沒有人下降0天。

+0

非常感謝,Rook。我關心的是如何訪問和查詢不屬於我的數據庫。他們的內部安全不是我的責任,但我必須保證我的服務能夠以安全的方式訪問和查詢他們的dbms,避免竊聽。 – 2011-02-15 17:19:21

+0

@Vicente阿爾馬格羅,這是一個令人難以置信的簡單的問題,你已經回答了,並不適合所以。下次你應該問serverfault。 – rook 2011-02-15 17:20:45

相關問題