我该如何在MySQL数据库中将用户帐户限制为特定表。例如:
UserName: RestrictedUser
DatabaseName: db_Payroll
TableName:
tb_Employees
tb_Users
tb_Payroll_YYMMDD
tb_Payroll_Processed
我想将“RestrictedUser”限制在tb_Users
和tb_Employees
这两个表中,而允许对未来创建的db_Payroll
中的其他表进行访问。
假设用户没有当前权限,您可以执行以下操作
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;
您可以通过运行以下命令来授予对特定表的访问权限:
GRANT ALL ON db_Payroll.tb_Users to RestrictedUser@RestrictedHostName;
对于其他表格也是一样的。如果适合,使用操作列表替代ALL
。
如果没有授予所有表格的访问权限,就无法授予尚不存在的单个表格的访问权限。
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权限。
GRANT
或其他账户修改语句时,你不需要执行FLUSH PRIVILEGES
,除非你直接使用DML修改了授权表。参见http://dev.mysql.com/doc/refman/5.5/en/privilege-changes.html。 - Jeremy Smyth