簡體   English   中英

如何在沒有硬編碼憑據的情況下正確連接到數據庫?

[英]How to properly connect to a database without hardcoding credentials?

所以我正在開發一個桌面應用程序,供管理員、客戶和客人查看和購買我保存在數據庫中的產品。 系統運行良好,用戶輸入他的憑據並登錄,但與數據庫的連接是使用硬編碼憑據進行的,如下所示:

    Public Function CONNECTION_STRING() As String
            Dim myConnectionString As String
            myConnectionString = "server=xxx.xx.xx.x;" _
                & "uid=admin;" _
                & "pwd=123;" _
                & "database=item_db"
            Return myConnectionString
    End Function

通過硬編碼交付這個應用程序是否安全? 因為它很容易使用 Ghidra 並閱讀我的意思。 我已經讀過關於散列它的信息,但是數據庫登錄系統將如何對其進行散列呢? 對不起,我很無知,但我正在學習:/。 順便說一句,散列將是 bCrypt。

不,這不是前進的好方法。

您不必將憑據硬編碼到應用程序中,這里有幾種方法:

  1. 如果可能,使用本機身份驗證(“集成安全性”)將用戶的 AD 憑據用於數據庫。 這樣,憑據就不會以明文形式發送或存儲在客戶端上。
  2. 提示用戶輸入憑據並使用它們來驗證數據庫連接。
  3. 使用配置文件存儲憑據。 這幾乎與在源中擁有憑據一樣糟糕,但至少它更易於管理,並將它們排除在 VCS 之外。
  4. 使用后端應用服務器處理數據,防止用戶直接訪問數據庫。 更多的是架構變化。

前兩個要求每個用戶都被授予連接數據庫的權限。

接受的答案給了我一個好主意,尋找一種在使用軟件的系統中存儲連接憑據的方法。 在我的例子中,所有使用我正在開發的軟件的計算機都使用 Microsoft Windows 10,所以它就像使用ODBC Data Sources一樣簡單,這是一個允許存儲連接字符串的軟件。 由於該軟件將在特定建築物中使用,因此在執行安裝時,我們只需將連接字符串保存在 ODBC 數據源中,並從源代碼中引用它,以防它在特定計算機中不存在不會連接。

Dim con As New MySqlClient.MySqlConnection

Public Sub Connect()
        Try
            conn.ConnectionString = "DSN=THE NAME OF THE DSN CREATED"
            conn.Open()
        Catch ex As MySqlClient.MySqlException
            MessageBox.Show(ex.Message)
        End Try
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM