2011-03-24 52 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