【问题标题】:How can I restrict a MySQL user to a particular tables如何将 MySQL 用户限制为特定表
【发布时间】:2012-04-04 13:20:57
【问题描述】:

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

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

我想将“RestrictedUser”限制为仅tb_Users 和tb_Employees,并授予db_Payroll 的其余表以供将来使用。

【问题讨论】:

    标签: mysql sql grant


    【解决方案1】:

    假设用户当前没有权限,如果您有很多表并且您只想让用户访问其中一些表,我所知道的最简单的解决方法是使用我个人参考的技术作为 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 权限。

    【讨论】:

      【解决方案2】:

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

      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;
      

      【讨论】:

      【解决方案3】:

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

      GRANT ALL ON db_Payroll.tb_Users to RestrictedUser@RestrictedHostName;
      

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

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

      【讨论】:

      • "如果不授予对所有表的访问权限,就不能授予对尚不存在的单个表的访问权限。"这是我的主要问题,工资单应用程序使用 db_Payroll,我正在使用 php 创建一个 web 界面,我想在不编写工资单应用程序使用的连接设置的情况下保护连接。
      • 所以决定你的表将是什么,并授予对适当表的访问权限。如果您正在考虑涉及在运行时创建表的设计,请停止!不要那样做。
      猜你喜欢
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多