如何将MySQL用户限制为特定表

时间:2012-03-20 02:29:48

标签: mysql sql grant

如何将MySQL数据库中的user_account限制为特定表。例如:

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

我希望仅将“RestrictedUser”限制为tb_Userstb_Employees,并且将为将来使用而创建的db_Payroll的其余表格被授予访问权限。

3 个答案:

答案 0 :(得分:32)

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

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 PRIVILEGES;

答案 1 :(得分:5)

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

GRANT ALL ON db_Payroll.tb_Users to RestrictedUser@RestrictedHostName;

同样适用于其他表格。如果合适,请使用操作列表而不是ALL

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

答案 2 :(得分: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 权限。