programing

MaxScale 블록이 데이터베이스에 직접 연결됨

nicescript 2023. 1. 3. 22:19
반응형

MaxScale 블록이 데이터베이스에 직접 연결됨

2노드 mariadb 클러스터와 1개의 최대 스케일 로드 밸런서가 있습니다.

데이터베이스에 직접 연결하려는 경우 maxscale은 연결을 차단합니다. 예를 들어 다음과 같습니다.

mysql -h 35.300.208.100 -u finn -p동작하고, 그 후에,USE test데이터베이스 "test"로 모든 것을 할 수 있습니다. 그래서 권리는 맞습니다.

하지만 만약 A가 한다면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를 사용하는 노드에서 동일한 작업을 수행하면 모든 것이 정상적으로 작동합니다.

maxscale.cnf 입니다.

대부분의 경우,ERROR 1045 (28000): Access denied클라이언트의 IP와 MaxScale IP 모두에 대해 일치하는 인가가 데이터베이스에 포함되어 있지 않은 경우.

이 문제를 해결하는 일반적인 방법은 다음과 같습니다.

  1. 실행SHOW GRANTS클라이언트 서버에서 데이터베이스로
  2. 실행SHOW GRANTSMaxScale 서버에서 데이터베이스로
  3. 두 쿼리의 출력을 비교하여 동일한지 확인합니다.

이것은 보통 데이터베이스의 인가에 관한 문제를 발견하기에 충분합니다.

이러한 종류의 오류를 해결하는 또 다른 방법은 MaxScale이 데이터베이스 사용자를 로드하기 위해 사용하는 쿼리를 실행하는 것입니다.이러한 쿼리에 대한 정확한 SQL은 GitHub의 MaxScale Wiki에서 찾을 수 있습니다.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, 그 다음에, 의 값dbcolumn은 클라이언트가 사용할 수 있는 유일한 데이터베이스입니다.이 예에서 알 수 있듯이'stackoverflow'@'%'사용자는 기본 데이터베이스 없이 접속할 수도 있고test디폴트 데이터베이스

언급URL : https://stackoverflow.com/questions/48658011/maxscale-blocks-direct-connect-to-database

반응형