2011-03-24 90 views
0

這可能會遇到一個簡單的問題,但我對關係數據庫的經驗非常有限。我如何在MySQL中調整權限?舉例來說,如果我有下面的代碼MySQL中的密碼和權限

CREATE TABLE IF NOT EXISTS user(
ID INT NOT NULL AUTO_INCREMENT, 

//...other columns 

PRIMARY KEY(ID) 
)ENGINE=InnoDB 



CREATE TABLE IF NOT EXISTS pictures 
(
ID INT NOT NULL AUTO_INCREMENT, 
userID INT NOT NULL, 

//...other columns 

PRIMARY KEY(ID), 
FOREIGN KEY (userID) REFERENCES user(ID) 
)ENGINE=InnoDB"; 

,我創建兩個新用戶,user1user2,我可以給他們的權限表這樣

GRANT ALL PRIVILIGES ON db_name.* to ".user1."@\"%\" identified by ".pass1 
GRANT ALL PRIVILIGES ON db_name.* to ".user2."@\"%\" identified by ".pass2 

,但有沒有什麼地方限制表內的特權僅限於特定的子集?我應該在我的PHP代碼中執行此操作嗎?我習慣於面向對象的編程,所以我不習慣於擁有所有信息的大型表格。

+0

你想要訪問特定的表或列嗎? – Zimbabao 2011-03-24 02:59:52

+0

對不起,我的意思是特定的行。很明顯,在那個例子中,你不希望'user1'訪問屬於'user2'的'pictures'表中的行。 MySQL是否提供了操作來處理這個問題,還是我必須在php – puk 2011-03-24 03:05:18

回答

1

具體而言,您無法授予對錶中某些行的訪問權限,而無法授予對其他行的訪問權限,這聽起來像是您要做的事情。

+0

是的,現在我明白了。我的錯誤在於認爲MySQL數據庫用戶必須與真實生活用戶保持一致。 – puk 2011-03-24 03:20:38

+0

@puk認爲它比用戶更「角色」。您可以授予「管理員」訪問某些表格的權限,「審計員」可以讀取所有內容等。這是有用的,但它不符合你想要做的。 – 2011-03-24 13:10:06

0

Grant Documentation中,您需要檢查文檔以查看您要查找的特定特權;但您需要爲每個單獨的權限對同一用戶執行多次授權(即一個用於選擇,一個用於更新等)。

1

我建議您在PHP中爲您的應用程序的最終用戶進行許可。使用數據庫用戶來控制訪問是一個過時的方法(在我看來),並且可能很難在MySQL/PHP中執行/支持,因爲它不常用。

+0

中執行此操作,例如,如果我有一張帶有由外部ID'userID'索引的圖片(圖片文件名)的表格,我應該使用php管理誰有權訪問什麼。我只是假設讓MySQL中的用戶可以用於這種情況。 – puk 2011-03-24 03:07:40

+1

您應該始終確保數據庫不受外界影響。您應該只從數據庫中選擇訪問權限,直到某人被認證,或者他們已經輸入某種類型的輸入來驗證自己,從而保護數據庫免受不良用戶的侵害。還只允許從某些表中進行選擇,並確保更新/插入僅由特定用戶在僅限於支持寫入的限定表上完成,這一點非常重要。保護數據庫;否則你最終容易被黑客入侵。 – Suroot 2011-03-24 03:09:18

+0

@puk正確。數據庫用戶用於控制應用程序具有的權限 - 不是應用程序的特定用戶擁有什麼權限。 – 2011-03-24 03:11:23