2009-01-23 29 views
1

我是使用PHP和MySQL創建Web應用程序的團隊的一員。該應用程序將具有多個用戶,角色不同。該應用程序還將以地理分佈方式使用。設置數據庫和訪問控制權限

因此,我們需要創建一個控制用戶權限的特定數據庫記錄即修改數據庫的查詢,以便只顯示特定記錄的訪問控制系統。例如,對於城市級別的用戶,只應顯示與用戶所在城市相關的記錄,而對於國家級別的用戶,則應顯示該國家所有城市的記錄。

我需要設計出能夠處理這種類型的信息檢索沒有硬編碼在SQL查詢的信息的系統幫助。

任何幫助,將不勝感激。

在此先感謝

+0

+1你的問題是一個很好的問題。它涉及如何控制對分層數據的訪問,這比起初看起來更微妙。 – 2009-06-04 03:50:29

回答

3

應用程序的設計將根據所需的安全需求而有所不同。

例如,信息存儲在多個數據庫或單個數據庫中嗎?向每個類型的用戶顯示錶示其特定權限的數據庫模式是否很重要?顯然這些問題的答案表明您是否需要一個更安全的數據庫訪問系統。

如果這樣做,則爲系統中存在的每種類型的用戶創建一個數據庫用戶。爲每個用戶提供相應的表,視圖,過程等的權限。當用戶對系統進行身份驗證時,必須根據該用戶的用戶類型創建條件數據庫連接。

採取最遠極端,它也可以是適當的嚴格通過存儲過程來控制對數據庫的訪問。然後每個數據庫用戶只能訪問他們需要的一組存儲過程。

在數據庫中實現安全性可能會很痛苦,增加了應用程序的複雜性以及維護它的成本,並降低了應用程序中的整體內聚力,但它也爲任何想要的人提供了非常嚴密的安全牆攻擊或以其他方式濫用系統。

無論你的數據庫爲安全起見內實施什麼樣的,你也顯然需要使用會話機制來存儲當前認證的用戶和他們的類型。爲特定用戶更改功能的簡單方法是將每個用戶的可用操作(讀取函數或方法)及其屬性(或屬性)封裝在類中以表示特定用戶。這樣,如果兩個人打Dashboard.php,他們將精確地看到他們有權訪問的數據。

最後,您可以通過數據庫中存儲的關於用戶的信息來控制某些訪問控制(並且可能需要),例如他們需要查看哪些城市的信息或他們監督的用戶。然後使用該信息創建可從用戶特定的域對象訪問的對象集合。

1

用戶是否可以直接訪問數據庫引擎?如果可以的話,避免它。

使應用程序連接到數據庫與提供它只是權限整個應用需要一個專用的用戶帳戶。根據應用程序定義的用戶和角色以及一個簡單的自定義API,執行應用程序內部的其餘部分。

如果這些用戶可能需要訪問和使用多個此類應用中,考慮存儲在一個單獨的共享數據庫的用戶和擁有的應用程序使用共享自定義API諮詢一下吧。