2012-01-30 37 views
2

为了提高我正在处理的应用程序的安全性,我希望能够防止任何类型的数据库修改。我知道我可以锁定来自mysql用户的整个表,但个别行呢?MySQL:如何锁定表中的单个行?

我仍然可以将新行添加到表中吗?也许只是一个特定的表,只允许SELECT和INSERT命令?

+1

有关使用的意见如何? – 2012-01-30 14:23:53

+1

但是如果视图从更改中获取数据的记录,则视图内的数据也会更改。 – NullVoxPopuli 2012-01-30 14:38:45

+0

帖子的标题与“锁定”行相关,但细节询问了访问控制。理解数据库术语中的术语“锁定”涉及并发访问数据,例如,一个“共享锁”允许其他连接读取但不修改数据,而不是阻止其他连接做任何事情(排除隔离级别)的“排他锁”。这与在数据上可以执行的动作类型不同,例如,选择,更新,插入,删除。 – aingram 2012-01-30 15:02:50

回答

2

这听起来像你想允许插入新行和查询现有行,但你不想允许更新或删除行。如果这是正确的,那么您将需要创建一个MySQL用户,该用户在所涉及的表上只具有INSERT和SELECT权限。不要授予UPDATE和DELETE权限。

grant INSERT和SELECT权限的用户foo上MY_TABLE:

GRANT SELECT, INSERT ON my_table TO 'foo'@'localhost'; 

revoke UPDATE和DELETE权限从用户foo上MY_TABLE:

REVOKE UPDATE, DELETE ON my_table FROM 'foo'@'localhost'; 
2

这将是“行级安全性”。 MySQL没有它,所以你需要实现自己。

例如,“AddedBy”列可用于限制数据更改到同一组中的其他成员。当然,如果Addedby用户更改组,您必须跟踪这个

要限制只允许INSERT和SELECT,只需授予这些权限。

否则,请添加更多的用例

+1

这是错误的:[“MySQL对InnoDB表使用行级锁定,对MyISAM,MEMORY和MERGE表使用表级锁。”](http://dev.mysql.com/doc/refman/5.5/en /internal-locking.html) – feeela 2012-01-30 14:17:09

+2

@feeela:我说“行级安全性”。我没有说“行级锁定”。阅读我的答案:不要评论我没有写的东西。为了帮助你阅读这些:http://stackoverflow.com/q/7942301/27535和http://www.dba-oracle.com/concepts/restricting_access.htm – gbn 2012-01-30 14:28:41

+0

@TheLindyHop:是的,谁不能阅读。傍晚在这里...... – gbn 2012-01-30 14:44:00

0

你可以使用一个特定的数据库用户的权限有限的应用程序(没有INSERT,DELETE)为所需的表。