【问题标题】:Access denied to remote user when doing LOCK TABLES执行 LOCK TABLES 时拒绝远程用户访问
【发布时间】:2021-03-21 16:53:34
【问题描述】:

我在两个 openwrt-qemu 系统上运行 mariadb-server v10.2.33-1。我希望远程用户在特定表上实现 LOCK TABLE。

在本地 mysql 服务器中,我创建了一个远程用户并使用以下命令授予了 LOCK TABLES 权限:

CREATE USER 'root'@'192.168.%' IDENTIFIED BY 'root';
GRANT SELECT ON `qkd`.`RawKeyStatus` TO 'root'@'192.168.%';
GRANT LOCK TABLES ON `qkd`.* TO 'root'@'192.168.%';
FLUSH PRIVILEGES;

在远程用户系统中运行SHOW GRANTS 时,我注意到LOCK TABLES 权限已分配给'root'@'192.168.%'。远程用户在表qkd.RawKeyStatus 上也有SELECT 权限。

但是远程系统中的LOCK TABLE qkd.RawKeyStatus READ; 命令失败并出现错误:

ERROR 1044 (42000): Access denied for user 'root'@'192.168.%' to database 'qkd'

我错过了什么?

【问题讨论】:

    标签: mysql mariadb mariadb-10.2


    【解决方案1】:

    运行SHOW PROCESSLIST;查看远程用户从哪个系统登录,如果不是192.168,%则更改GRANT p>

    MariaDB [(none)]> show processlist;
    +------+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
    | Id   | User        | Host      | db   | Command | Time | State                    | Info             | Progress |
    +------+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
    |    1 | system user |           | NULL | Daemon  | NULL | InnoDB purge coordinator | NULL             |    0.000 |
    |    2 | system user |           | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
    |    3 | system user |           | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
    |    4 | system user |           | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
    |    5 | system user |           | NULL | Daemon  | NULL | InnoDB shutdown handler  | NULL             |    0.000 |
    | 3357 | root        | localhost | NULL | Query   |    0 | init                     | show processlist |    0.000 |
    +------+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
    6 rows in set (0.01 sec)
    
    MariaDB [(none)]>
    

    【讨论】:

      【解决方案2】:

      更新: 该问题与通配符 192.168.% 有关。为了向子网 192.168.A.B 的所有用户授予 G​​RANT,正确的通配符应该是 192.168.%.%

      更安全的选择是使用子网掩码:

      GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
      

      现在LOCK TABLE qkd.RawKeyStatus READ; 命令与输出完美运行 Query OK, 0 rows affected (0.02 sec)

      参考:How to grant remote access to MySQL for a whole subnet?

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 1970-01-01
        • 2017-10-25
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多