如何限制MySQL用户访问特定表格?

23

我该如何在MySQL数据库中将用户帐户限制为特定表。例如:

UserName: RestrictedUser
DatabaseName: db_Payroll 
TableName: 
  tb_Employees
  tb_Users
  tb_Payroll_YYMMDD
  tb_Payroll_Processed

我想将“RestrictedUser”限制在tb_Userstb_Employees这两个表中,而允许对未来创建的db_Payroll中的其他表进行访问。

3个回答

41

假设用户没有当前权限,您可以执行以下操作

GRANT SELECT, INSERT, DELETE ON db_Payroll.tb_Users TO RestrictedUser@'%'
GRANT SELECT, INSERT, DELETE ON db_Payroll.tb_Employees TO RestrictedUser@'%'

根据您想授予用户的具体权限,您可以将 SELECT, INSERT, DELETE 更改为其他内容,例如 ALL PRIVILEGES

之后,请记得通过运行 flush the privileges 刷新权限,使其生效。

FLUSH PRIVILEGES;

4
在使用GRANT或其他账户修改语句时,你不需要执行FLUSH PRIVILEGES,除非你直接使用DML修改了授权表。参见http://dev.mysql.com/doc/refman/5.5/en/privilege-changes.html。 - Jeremy Smyth

5

您可以通过运行以下命令来授予对特定表的访问权限:

GRANT ALL ON db_Payroll.tb_Users to RestrictedUser@RestrictedHostName;

对于其他表格也是一样的。如果适合,使用操作列表替代ALL

如果没有授予所有表格的访问权限,就无法授予尚不存在的单个表格的访问权限。


"你不能授予访问尚不存在的单个表的权限,而不授予所有表的访问权限。" 这是我的主要问题,db_Payroll被工资应用程序使用,我正在使用PHP创建Web界面,并希望在不编写工资应用程序使用的连接设置的情况下保护连接。 - aintgel
9
决定你的表格应该是什么,并授权访问适当的表格。如果你正在考虑一个涉及在运行时创建表格的设计,请停止!不要这样做。 - user149341

0
假设用户没有当前权限,如果您有很多表格并且只想让用户访问其中的一些表格,则我所知道的最简单的解决方法是使用我个人称之为“QueryCeption™(查询中的查询)”的技术:
SELECT GROUP_CONCAT(CONCAT('grant select on `db_Payroll`.', table_name, ' to `RestrictedUser`@`%`') SEPARATOR ';
') from information_schema.tables where table_schema = 'db_Payroll' and 
table_name not in ('TABLE-YOU-WANT-TO-RESTRICT-1', 'TABLE-YOU-WANT-TO-RESTRICT-2','TABLE-YOU-WANT-TO-RESTRICT-3');

这将输出一个文本字段,您可以将其复制并粘贴到您的编辑器中。这个特定的例子将授予该用户不在受限制表数组内的所有表的SELECT权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接