MaxScale阻止直接连接到数据库

时间:2018-02-07 07:17:54

标签: mysql database mariadb cluster-computing maxscale

我有一个带有一个maxscale负载均衡器的2节点mariadb集群。

如果我想直接连接到数据库,

maxscale阻止连接:例如:

mysql -h 35.300.208.100 -u finn -p有效,如果我再做USE test我可以用数据库“test”做任何事情。所以权利是正确的。

但如果做mysql -h 35.300.208.100 -u finn -p test我收到错误:

ERROR 1045 (28000): Access denied for user 'finn'@'188.68.43.150' (using password: YES) to database 'test'

因此,如果我在使用localhost的节点上执行相同的操作,一切正常。

This is my maxscale.cnf

1 个答案:

答案 0 :(得分:0)

大多数情况下,当数据库上的授权不包含客户端IP和MaxScale IP的匹配授权时,您将收到ERROR 1045 (28000): Access denied

解决这个问题的通常方法是:

  1. 从客户端服务器
  2. 对数据库执行SHOW GRANTS
  3. 从MaxScale服务器
  4. 对数据库执行SHOW GRANTS
  5. 比较两个查询的输出并确保它们相同
  6. 这通常足以发现数据库中授权的任何问题。

    解决这些错误的另一种方法是执行MaxScale用于加载数据库用户的查询。可以在MaxScale wiki on GitHub上找到这些查询的确切SQL。对于MaxScale 2.1和更新版本,这将是:

    SELECT u.user, u.host, d.db, u.select_priv, u.password
        FROM mysql.user AS u LEFT JOIN mysql.db AS d
        ON (u.user = d.user AND u.host = d.host)
    UNION
    SELECT u.user, u.host, t.db, u.select_priv, u.password
        FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t
        ON (u.user = t.user AND u.host = t.host);
    

    这应返回包含MaxScale使用的身份验证数据的结果集。以下是查询可以返回的示例:

    +---------------+-----------+------+-------------+-------------------------------------------+
    | user          | host      | db   | select_priv | password                                  |
    +---------------+-----------+------+-------------+-------------------------------------------+
    | root          | localhost | NULL | Y           |                                           |
    | maxuser       | 127.0.0.1 | NULL | Y           | *5EDBD32E469DAE0CE10E6999C3899DEFCB9F12E0 |
    | root          | %         | NULL | Y           |                                           |
    | maxuser       | %         | NULL | Y           | *5EDBD32E469DAE0CE10E6999C3899DEFCB9F12E0 |
    | skysql        | 127.0.0.1 | NULL | Y           | *85058F5DEAD82AE3507664C2C11BDA7B1827B80D |
    | skysql        | %         | NULL | Y           | *85058F5DEAD82AE3507664C2C11BDA7B1827B80D |
    | test          | %         | NULL | Y           | *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 |
    | stackoverflow | %         | test | N           | *5635C63172887A7D7C0828876228A5E4DC523969 |
    | stackoverflow | %         | NULL | N           | *5635C63172887A7D7C0828876228A5E4DC523969 |
    +---------------+-----------+------+-------------+-------------------------------------------+
    

    select_priv告诉用户是否允许连接任何默认数据库。如果设置为N,则db列中的值是允许客户端使用的唯一数据库。正如我们从示例结果中看到的那样,'stackoverflow'@'%'用户可以在没有默认数据库或test默认数据库的情况下进行连接。