2011-02-07 166 views
0

我必須爲學術目的開發基本的社交網絡;但我需要一些提示用戶管理..多用戶數據庫設計

用戶被細分爲3組,具有不同的權限:管理員,分析師和標準用戶。 對於每個用戶都應該在數據庫中存儲以下信息:姓名,姓氏,電子郵件,年齡,密碼。

我不太清楚我應該怎麼設計theese兩種解決方案之間的數據庫:

1)一個表稱爲「用戶」與該解釋什麼是用戶可以做的「角色」屬性,什麼都可以」 t),權限通過php管理

2)每個應用程序用戶都是使用查詢'CREATE ROLE'(這是一個postgres數據庫)創建的數據庫用戶,並且他擁有一些授予'GRANT'聲明

您應該考慮到該項目是針對數據庫考試的。

謝謝

+1

不要將您的密碼存儲在數據庫中!請參閱http://blog.moertel.com/articles/2006/12/15/never-store-passwords-in-a-database以獲取解釋。 – btilly

回答

2

不要使用數據庫的授權機制作爲您的應用程序的授權系統。三個主要原因:

A)如果不重建整個應用程序,您將無法更改爲其他數據庫。 B)你想在應用中授予用戶的東西的類型可能與數據庫的ACL系統允許的類型有所不同。

而且最重要的是:

C)你不想給一個應用程序用戶直接做任何你的數據庫的能力。永遠。

所以你的#2選項是正確的。因此,將用戶類型字段與每個用戶記錄一起存儲,然後「用戶類型允許的內容」成爲您在PHP中計算的業務邏輯的一部分。

0

解決方案1每一次,因爲你不想限制自己只在每個表的基礎上分配權限。使用數據庫用戶會很麻煩並且不太實用。

0

與選項1一起使用。從長遠來看,它會更加靈活,可能更易於編寫代碼,並且您不希望將應用程序邏輯與特定實現過於緊密結合。如果您稍後想要移植應用程序以在SQL-Server上運行,該怎麼辦?如果數據庫用戶的實施方式不同,則選項2會給您帶來嚴重的困難。

0

與您的第一個選擇(用PHP管理權限)一起去吧。這裏的原因有:

  1. 數據庫不給你足夠的選擇和粒度的權限,你需要管理(誰可以發送電子郵件,哪些羣體的人被允許訪問等)
  2. 通常到數據庫的連接是相當昂貴的,因此您需要連接一次並儘可能保持連接(使用相同的數據庫用戶)
  3. 所有數據庫在處理用戶帳戶的方式上都不是相同的。通過在SQL之上構建自己的用戶系統,您可以希望更獨立於數據庫
  4. 在現實世界中,管理數據庫和開發程序的任務由完全不同的人完成,程序無權創建或更改數據庫用戶