為應用程序的每個使用者使用不同的數據庫帳戶是否是一種好習慣?
我習慣的應用程序是基於伺服器的,並且為多個使用者使用一個數據庫帳戶,應用程式碼控制使用者可以做什麼,或者單使用者。
是否有任何成功的複雜業務應用程序,其中每個人都需要自己的數據庫帳戶,並且依賴數據庫伺服器來執行有關每個使用者應該被允許和不允許做什麼的策略規則?
我正在考慮多個人為一個數據庫中的資訊做出貢獻的應用程序,並且可以訪問其他人儲存的資訊 - 例如,組織中的同事都需要訪問客戶記錄。
還有這種類型的設置的名稱嗎?
如果您需要在數據級別實施真正嚴格的控制。例如廣泛的審計。如果多個使用者共享同一個帳戶,審計就不是很好。如果您有一些使用者需要直接訪問數據數據庫。
如果安全性如此嚴格,您通常甚至不會直接公開數據庫。您有一個服務,客戶端必須從該服務獲取數據。
在 Web 應用程序中,數據庫(例如埠 1433)通常不會直接公開,因此您具有一定的安全級別。即使 Web 應用程序直接訪問數據庫,使用者仍然不能直接訪問數據庫。
如果登錄名和密碼在客戶端應用程序中,那麼它可能會被黑客入侵。如果一個域可以使用集成安全。
在數據庫中,您可以進行非常精細的控制。但是行級控制有點工作。數據庫不是業務規則的好工具。業務規則和詳細的安全性通常在應用程序級別執行。
您可以使用混合模式,其中管理員使用了一些儲存過程,並且您想要跟踪哪個管理員。您可以將只讀權限授予直接生成報告的使用者。
這裡的挑戰是您的數據庫訪問是由抽像管理的。他們不是以自己的身份連接使用者,而是從本質上承擔了一些通用應用程序角色的身份。您不僅失去了個人連接的可見性,而且還失去了為所有個人使用者定義不同類型訪問權限的粒度。
使用這種方法的主要原因是簡單。許多應用程序的設計使應用程序的使用者對數據庫一無所知。他們真的不需要它,特別是如果應用程序管理自己的內部安全性。大多數個人使用者永遠不會直接連接到數據庫,因此沒有必要為他們定義顯式登錄。
您應該考慮讓數據庫管理您的安全性的唯一一次是您的使用者將直接連接到您的數據庫。這意味著他們正在繞過您的應用程序,並且它不再能夠自行實施安全性。這裡的優點是您可以更精細地定義您的安全性。缺點是管理使用者及其權限的成本較高。
如果您確實需要這種訪問權限,那麼您希望使用基於角色的訪問控制。您應該根據數據庫中需要的權限類型來定義角色,然後將各個使用者分組到這些角色下。這使您可以更好地審核和控制您的安全模型,在管理直接訪問時可能會迅速失控。
對此有一種混合方法。如果您希望您的安全性部分由數據庫管理,您可以創建多個應用程序使用者,每個使用者由他們的角色定義,並根據他們履行的角色明確授予這些使用者訪問權限。這意味著您可以將數據庫引擎用於您的某些安全模型,但您仍然必須在應用程序中進行一些管理。它增加了應用程序使用者模型的複雜性,但在使用中的不同登錄時為您提供了更精細的粒度。