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

如何将MySQL用户限制为特定的表,mysql,sql,grant,Mysql,Sql,Grant,如何将MySQL数据库中的用户帐户限制为特定的表。例: UserName: RestrictedUser DatabaseName: db_Payroll TableName: tb_Employees tb_Users tb_Payroll_YYMMDD tb_Payroll_Processed 我只想将“RestrictedUser”限制为tb\U用户和tb\U员工,并且将为将来使用而创建的db\U工资单的其余表被授予访问权限。假设用户当前没有权限,您可以执行以下操作

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

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

我只想将“RestrictedUser”限制为
tb\U用户
tb\U员工
,并且将为将来使用而创建的
db\U工资单
的其余表被授予访问权限。

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

GRANT SELECT, INSERT, DELETE ON db_Payroll.tb_Users TO RestrictedUser@'%'
GRANT SELECT, INSERT, DELETE ON db_Payroll.tb_Employees TO RestrictedUser@'%'
根据您希望授予用户的确切权限,您可以将
选择、插入、删除
更改为其他权限,例如
所有权限

之后,请记住刷新特权,以便通过运行

FLUSH PRIVILEGES;

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

GRANT ALL ON db_Payroll.tb_Users to RestrictedUser@RestrictedHostName;
其他表格也是如此。如果合适,请使用操作列表,而不是
ALL


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

假设用户没有当前权限,如果您有很多表,并且您只想授予用户对其中几个表的访问权限,据我所知,最简单的解决方法是使用一种我个人称之为QueryOption的技术™ (查询中的查询):


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

“如果不授予对所有表的访问权限,则无法授予对尚不存在的单个表的访问权限。”这是我的主要问题,工资单应用程序使用db_Payroll,我正在使用php创建一个webinterface,我希望在不写入payroll应用程序使用的连接设置的情况下保护连接。因此,请确定您的表是什么,并授予对相应表的访问权限。如果您正在考虑在运行时创建表的设计,请停止!不要这样做。使用
GRANT
或任何其他帐户修改语句后,您不需要
FLUSH PRIVILEGES
,前提是您直接使用DML修改了授权表。看见
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');