我怎樣才能讓 MsAccess 前端和 Mysql 後端更加使用者了解?
我有一個使用 mysql 後端的分佈式 MsAccess 前端數據庫。
它使用 Windows 系統 DSN ODBC 連接來連接到伺服器。我所有的連結表都引用了那個 ODBC 連接。但問題是,它們都使用相同的使用者名和密碼,這些使用者名和密碼被硬編碼到每台電腦中。
有什麼更好的方法來實現它,以便每個使用者都能登錄。
由於每個 DSN 連接都是“硬連線”的,我不認為每次應用程序啟動時都重寫系統資料庫是一種安全的方式,因為應用程序崩潰的那一刻 DSN 設置將保持不變。
我不知道我是否可以在沒有使用者名和密碼的情況下離開系統 DSN 以獲得提示,但是我們連接到四個不同的數據庫,所以我不希望使用者輸入他們的資訊四次,因為這只會讓使用者感到沮喪。
我在想也許我可以將系統 DSN 使用者用作使用者表的只讀使用者,或者最好是一個驗證使用者的過程,除非經過驗證,我不確定隨後如何連接每個表。我可以在 ODBC 連接字元串中儲存一個全域變數嗎?
有什麼更好的方法讓 MsAccess 更具使用者意識?
(我查看了 MSACCESS 安全設置,但似乎 Microsoft 正在減少它,我試圖建立它完全鎖定我並且不提供任何形式的登錄驗證。我猜它只是使用寡婦登錄作為安全但是這不是一個真正的解決方案)這裡有一個免責聲明:
Access 2010 安全性簡介 (office.microsoft.com)
訪問和使用者級安全
Access 不支持以新文件格式(.accdb 和 .accde 文件)創建的數據庫的使用者級安全性。但是,如果您在 Access 2010 中從早期版本的 Access 打開數據庫並且該數據庫應用了使用者級安全性,則這些設置仍然有效。
重要使用使用者級安全功能創建的權限不會保護您的數據庫免受具有惡意意圖的使用者的攻擊,也不能用作安全屏障。使用此功能可以提高受信任使用者的數據庫的可用性。為幫助確保您的數據安全,請使用 Windows 文件系統權限僅允許受信任的使用者訪問您的數據庫文件或關聯的使用者級安全文件。
如果您將數據庫從具有使用者級安全性的早期版本的 Access 轉換為新的文件格式,Access 會自動刪除所有安全設置,並應用保護 .accdb 或 .accde 文件的規則。
最後,請記住,當您打開具有新文件格式的數據庫時,所有使用者都可以隨時看到所有數據庫對象。
據我了解,您希望為應用程序中的最終使用者(“應用程序使用者”)提供更加個性化的體驗/環境,同時通過將使用者身份驗證過程與 OBDC DSN 連接憑據(“數據庫使用者”)。
這種定制的使用者環境通常是通過讓您的最終使用者向您的應用程序驗證自己的身份來實現的。
my_app_db.users
這通常是通過讓使用者在應用程序載入時輸入使用者名和密碼(通常儲存在表中)來完成的。在此應用程序使用者身份驗證發生之前,應用程序本身(或機器)需要與數據庫伺服器建立連接。此“數據庫使用者”通常通過以下方式實現:
- 硬編碼到應用程序(和/或安裝程序腳本/二進製文件)中的靜態預定義數據庫使用者/密碼。然後,安裝腳本通常會向您(伺服器管理員)詢問具有(以及其他)權限(通常是 root 使用者)的數據庫憑據,
CREATE
以便GRANT
安裝程序可以創建它需要的數據庫使用者。- 預先創建的具有適當權限的使用者定義數據庫使用者;然後安裝程序將要求您提供這些憑據,應用程序將使用它自己的可逆加密(或混淆)方法儲存這些憑據,以便將這些憑據保存在客戶端的某個位置(.dat 文件、系統資料庫項等)在建立數據庫連接之前可以讀取的一種方式。
至於安全性,這裡的最小權限規則很重要:這個數據庫使用者應該只被授予應用程序正常執行所需的最少權限(即 SELECT、INSERT、UPDATE,也許還有 DELETE,並且只針對應用程序的數據庫) ,絕不是系統/主數據庫)。
這與不在最終使用者機器上以純文字形式儲存數據庫憑據相結合,可以保護您的應用程序免受未經授權的訪問。請記住,如果惡意使用者獲得了對安裝了您的應用程序的電腦的本地管理員訪問權限,那麼遊戲就結束了:他們可能會將該連接字元串從記憶體中提取出來並解密,甚至嗅探網路介面上的 MySQL 流量以獲取數據庫使用者的憑據,此時,取決於您對該使用者的限製程度(好吧,希望 MySQL 會定期修補)以及攻擊者的複雜程度和決心。
請記住,許多數據庫應用程序將使用應用程序伺服器,本質上是中間的“監視守衛”,代表客戶端代理與數據庫的連接。這通常是出於性能/可擴展性的原因,但也有一個安全優勢,因為數據庫伺服器可以被隔離/僅限於應用程序伺服器,並且沒有最終使用者客戶端可以直接訪問它。
至於 ODBC DSN 選項和 MySQL,我對可用的東西並不那麼精通。但是,在更高版本的 MySQL中似乎確實支持 Windows Native 身份驗證。
但是,我已經成功地使用了帶有安全證書的 MySQL/NET 連接器以及 MySQL 和 ASP.NET 應用程序,但是我不知道這是否擴展到 Microsoft Access;你可能不得不在那裡寫一些 .NET 膠水。
當/如果具體到細節時,你最好在Stack Overflow上詢問一下。
希望這可以幫助。