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를 사용하는 노드에서 동일한 작업을 수행하면 모든 것이 정상적으로 작동합니다.
대부분의 경우,ERROR 1045 (28000): Access denied
클라이언트의 IP와 MaxScale IP 모두에 대해 일치하는 인가가 데이터베이스에 포함되어 있지 않은 경우.
이 문제를 해결하는 일반적인 방법은 다음과 같습니다.
- 실행
SHOW GRANTS
클라이언트 서버에서 데이터베이스로 - 실행
SHOW GRANTS
MaxScale 서버에서 데이터베이스로 - 두 쿼리의 출력을 비교하여 동일한지 확인합니다.
이것은 보통 데이터베이스의 인가에 관한 문제를 발견하기에 충분합니다.
이러한 종류의 오류를 해결하는 또 다른 방법은 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
, 그 다음에, 의 값db
column은 클라이언트가 사용할 수 있는 유일한 데이터베이스입니다.이 예에서 알 수 있듯이'stackoverflow'@'%'
사용자는 기본 데이터베이스 없이 접속할 수도 있고test
디폴트 데이터베이스
언급URL : https://stackoverflow.com/questions/48658011/maxscale-blocks-direct-connect-to-database
'programing' 카테고리의 다른 글
2013 - HAProxy를 통해 MariaDB에 연결하는 동안 '초기 통신 패킷 읽기' 시스템 오류로 MySQL Server에 대한 연결이 끊김: 0 (0) | 2023.01.13 |
---|---|
저장 방법HTML 래퍼 없이 DOMDocument의 HTML을 사용하시겠습니까? (0) | 2023.01.03 |
PHP 오류 해결 방법 '알림:배열에서 문자열로 변환...' (0) | 2023.01.03 |
time.sleep --슬립 스레드 또는 프로세스? (0) | 2023.01.03 |
JDBC URL에서 Galera 로드 밸런서를 효과적으로 사용하는 방법 (0) | 2023.01.03 |