2012-10-23 24 views
1

在MySQL數據庫中存儲用戶憑證的最佳方法是什麼? 我的意思是結構,而不是數據(散列與乾淨文本)。如何在數據庫中組織用戶憑證?

我有網站,我們得到了

Root Admin (1) 

Client Admin (1) 
Client Sub-Admins (N) 

Employer Admin (N) 
Employer Sub-Admins (N) 

以上的用戶登錄在後臺頁面

Users (N) 

用戶登錄在網站

N個前端 - 意味着無限

猜我的問題是我應該把所有的管理員放在同一個表中?然而,僱主並不像客戶管理員那樣信任。

如果我把管理員在不同的表,我如何在PHP做認證?從兩個表中取數據併合併到數組中,然後在數組中查看用戶是否存在?

+0

有管理員和用戶之間的這種根本區別,你不能只擁有「排名」字段? –

+0

在我看來,在同一個表格或甚至相同的登錄頁面中擁有用戶和管理員並非上帝的安全做法。 此外,如果頁面和表不同,我可以限制管理頁面的IP地址只有信任的人。 –

+0

功能上的差異,管理員不會和用戶做同樣的事情,我們也不需要把自己與用戶表中的管理條目混淆起來。 關於所有管理員管理員需求是用戶名和密碼相反的聯繫信息地址日期等進入用戶表。 –

回答

1

一種方式做到這一點是向認證/用戶簡檔數據從角色及其可能的陣列分離。所以,爲用戶分配角色。地獄,分配上下文到你的角色。我看到它的方式,你有用戶和角色之間的1對多的關係,其中角色被分配上下文(僱主的聯繫,客戶的管理,一般管理...)。

+0

,如果您需要爲管理員保存比普通用戶所需更多的信息,請從STI運行,並使用類表繼承。 http://community.devexpress.com/forums/p/95346/327589.aspx它似乎只是用例。 – ChuckE

3

如果你永遠只能去有一個根/客戶端管理,我建議乾脆單獨存儲其user_id值,可能在配置文件中是難以通過像SQL注入來修改。否則,下面的方案應該允許您有相當大的靈活性,可以根據需要將盡可能多的用戶分配到多個用戶組。

TABLE users 
    user_id INT PK AUTO_INCREMENT 
    user_name VARCHAR 
    user_password VARCHAR 
    ... 

TABLE groups 
    group_id INT PK AUTO_INCREMENT 
    group_name VARCHAR 
    [possible permissions declarations, 
    or create a similar group_perms table] 
    ... 

TABLE user_group_map 
    user_id INT PK 
    group_id INT PK 
0

我不會用多個表只是基於我是多麼信任他們的獨立用戶。在你的案例中閱讀你的問題和評論後,你將不得不爲根管理員,客戶管理員,僱主管理員和普通用戶創建單獨的表,因爲你的信任級別對於每個組都是不同的。即使只有兩個表格,開始編碼時,實施/維護可能會變得非常難看......

您似乎非常堅定地決定使用單獨的表格,如果您選擇這樣做,那麼您可以「隱藏」這一點,例如,創建一個視圖,再合併這些表,在你的DAO使用SQL工會,或讀取每個表和合並程序的數據等,爲您打造您的應用程序,你將極有可能與此設計問題。

我寧願使用單個表格users,並介紹roles的概念以及它們之間的多對多關係。在創建用戶時,我會將每個用戶與默認角色(例如,用戶根管理員具有角色根管理員等)以及他們似乎適合的任何其他角色相關聯(例如,用戶cleint -admin具有基於需求客戶子管理等)的其他角色有可能是不涉及直接的用戶,如角色。 客人構件

我也將推出應用contexts的概念,一個可選的多對許多關係到角色那麼最初的作用根管理員與應用程序上下文所有意思是s關聯他/她沒有任何限制。其他上下文將根據業務需求來創建(例如,角色僱主管理員是上下文分期付款員工等部分)的基礎上

授權時,安全管理器組件可以授予/拒絕訪問用戶及其相關的角色/上下文(如果需要,還包括附加的邏輯)(例如用戶被禁用)。

您的下一個擔心是您有某些用戶的其他數據不適用於他人。爲了解決這個問題,我會介紹profiles表與可選的一對一關係的用戶表(不是每個用戶都有一個配置文件,例如,用戶根管理員不)。

架構(草案):

__________________     __________________ 
|USERS    |     |ROLES    | 
|==================|     |==================| 
|id    |     |id    | 
|username   | 1..*  1..* |name    | 
|password   | -------------- |description  | 
|failedattempts |     |...    | 
|disabled   |     |     | 
|...    |     |     | 
|__________________|     |__________________| 

     | 1         | 0..* 
     |          | 
     |          | 
     |          | 
     | 0..1        | 0..* 
__________________     __________________ 
|PROFILES   |     |CONTEXTS   | 
|==================|     |==================| 
|id    |     |id    | 
|firstname   |     |name    | 
|lastname   |     |description  | 
|email    |     |...    | 
|dob    |     |     | 
|...    |     |     | 
|__________________|     |__________________|