2011-10-04 48 views
0

我正在研究一個項目,並想知道以下情況的最佳做法是什麼?應用程序訪問各種數據庫

我正在開發一個需要用戶訪問控制的應用程序。當用戶啓動應用程序時,系統會提示您輸入用戶名和密碼。該應用程序的設計使得用戶將根據他們來自哪個學校連接到不同的數據庫。所以,每所學校都會有一個不同的數據庫地址。那麼,我是否也要求用戶在登錄提示符處輸入數據庫url?

此外,我如何重新嚴格訪問數據庫,只允許該應用程序訪問數據庫?例如,您不能啓動不同的應用程序,並嘗試使用相同的用戶名和密碼連接到該數據庫,因爲它不是正確的應用程序?

謝謝,如果您需要我進一步解釋任何事情,請讓我知道。

更多詳細信息:

的學校名單將不會在編譯時設定。學校將選擇使用該應用程序,然後建立一個用於該軟件的數據庫,然後他們的學生將使用該應用程序。所以,不會有最初的學校名單。你有什麼建議來解決這個問題?

每個學校宿主都有自己的服務器。

+0

您確定要爲每所學校設置一個完全不同的*數據庫*而不是不同的*表*嗎?這對我來說似乎很笨拙,但你可能有你的理由。 –

回答

1

沒有必要爲每個學校做一個不同的數據庫,或者就此而言,甚至是不同的表格。

您可以只使用一個表像

school -- all schools with data belonging to that school. 
------------ 
id integer primary key auto_increment 
name varchar(255) 
unique index idx_school (name) 

user -- all users from all schools in one table. 
-------- 
id integer primary key auto_increment 
username varchar(255) 
passhash varchar(200) -- hashed and salted password 
salt varchar(10)  -- salt used, not encrypted, but different per user. 
school_id integer not null foreign key references school(id) 
unique index idx_user (username, school_id) 

使用選擇一個用戶:

SELECT u.id FROM user u 
INNER JOIN school s ON (s.id = u.school_id) 
WHERE s.name = :schoolname 
    AND u.name = :username 
    AND u.passhash = SHA2(CONCAT(salt,:password),512) 

:....是你的參數。

+0

學校名單不會在編譯時設定。學校將選擇使用該應用程序,然後建立一個用於該軟件的數據庫,然後他們的學生將使用該應用程序。所以,不會有最初的學校名單。你有什麼建議來解決這個問題? – prolink007

+0

你可以在需要時添加學校,這就是爲什麼有一個學校的名單。非常簡單且非常靈活,並且比每次添加新數據庫都容易得多,而且安全性也更高。 – Johan

+0

是的,但每所學校都必須擁有自己的服務器。這樣他們的信息就會保密,只有他們。我會在帖子中補充說明,也許這並不明確。 – prolink007

1

而不是要求用戶選擇或輸入他們相應的數據庫地址,您可以使用它們將用於認證的密碼,並使用戶在相應的學校數據庫上使用相同的密碼,但具有有限權限(例如更新,插入等只是不給丟或刪除)。因此,根據所選擇的學校,將選擇相應的數據庫URL(硬編碼或從配置文件加載),並且輸入的密碼將用於連接,如果其正確,則與數據庫的連接將成功發生。

雖然這不能解決其他應用程序使用相同憑據訪問數據庫的第二個問題。如果我仔細考慮,會更新答案。

相關問題