전체 서브넷에 대해 MySQL에 대한 원격 액세스 권한을 부여하는 방법은 무엇입니까?


94

이 코드를 사용하여 하나의 IP에 대한 액세스 권한을 쉽게 부여 할 수 있습니다.

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

하지만 전체 서브넷 192.168.1. *이 데이터베이스에 원격으로 액세스하도록 허용해야합니다.

어떻게 할 수 있습니까?

답변:


101

편집 : 이 페이지에서 Malvineous 의 답변을 보고 찬성하는 것을 고려 하십시오. 넷 마스크는 훨씬 더 우아한 솔루션입니다.


IP 주소에서 퍼센트 기호를 와일드 카드로 사용하면됩니다.

에서 http://dev.mysql.com/doc/refman/5.1/en/grant.html

호스트 이름에 와일드 카드를 지정할 수 있습니다. 예를 들어, user_name@'%.example.com'적용 user_name어떤 호스트 example.com도메인 및 user_name@'192.168.1.%'적용 user_name어떤 호스트 192.168.1클래스 C 서브넷.


6
방금 이렇게했지만, 적용되지 않는 이유 : user_name@'192.168.1.my-hacked-rnds.killing.mysql.com '???? 이게 MySQL이기 때문에 나는 답을 알고 싶지 않다고 느낀다.
Florian Heigl 2015

+ 플로리안, 극복해야 할 보안 계층을 추가하기 때문에 단순히 '%'를 사용하는 것보다 낫다고 생각하지만, 약점에 대해 좋은 지적을했다고 생각합니다. 저는 다른 방법으로이 구성을 보완합니다. 예를 들어 방화벽을 통해 액세스를 제어 할 수있는 별도의 서브넷에 데이터베이스 서버를 잠그는 등의 문제를 해결합니다.
Josiah

22
특별히에서 해결 ''192.168.1.my-hacked-rnds.killing.mysql.com '와 같은 예 dev.mysql.com/doc/refman/5.5/en/account-names.html : 그러한 시도 호일, MySQL은 숫자와 점으로 시작하는 호스트 이름에 대한 일치를 허용하지 않습니다. ... IP 와일드 카드 값은 호스트 이름이 아닌 IP 주소 만 일치시킬 수 있습니다.
Stefan Lasiewski 2015 년

120

그것은 당신이 또한 넷 마스크를 사용할 수 있습니다처럼 보이는 , 예를 들어,

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

7
이것은 유일한 기술적 정답이기 때문에 받아 들여지는 대답이어야합니다. 적어도 5.5부터 지원 : dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
"172.16.0.0/16"과 같은 CIDR 표기법을 사용하지 마십시오. 작동하지 않습니다. 항상 전체 넷 마스크를 사용하십시오.
Oliver R.

범위의 첫 번째 IP 주소를 사용해야합니다. 예를 들어 192.168.0.34/255.255.255.0을 사용하면 실패합니다!
Sander

@SanderBackus : 실제로 의미가없는 192.160.0.34/255.255.255.0것과 동일 합니다 (마지막 숫자는 0에서 255까지 가능하며 34의 값을 무시 함). IP에 유효한 마스크를 사용하면 작동합니까 ? 192.168.0.34/24/24192.168.0.34/255.255.255.252
Malvineous

@Malvineous 그게 내 요점이었습니다. 192.160.0.34/255.255.255.0을 사용하는 경우 mysql은 192.160.0.34를 허용하지 않습니다. 나는 전체 / 24를 허용하려고했지만 (문서화 된대로 전체 넷 마스크를 사용했습니다), 분명히 전체 범위를 허용하려면 192.160.0.0/255.255.255.0을 사용해야합니다.
Sander

28

다음과 같이 와일드 카드로 '%'를 사용합니다.

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';

12
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

와일드 카드 문자는 "*"대신 "%"입니다.


6

내가 직면 한 특이성에 대한 메모 :
고려 :

db server:  192.168.0.101
web server: 192.168.0.102

mysql.user 'user'@'192.168.0.102'에 password1 로 정의 된 사용자 와 password2로 다른 사용자가있는 경우 'user'@'192.168.0.%',

그때,

password2를 사용하여 'user'로 웹 서버에서 db 서버에 연결하려고하면

단일 IP 'user'@'192.168.0.102'인증이 와일드 카드 'user'@'192.168.0.%'인증을 통해 사용 되기 때문에 '액세스 거부'오류가 발생 합니다.


2
이것이 질문에 대한 답인지 잘 모르겠습니다. 원래 질문에 대한 직접적인 답변을 제공하지 않는 경우 댓글로 게시해야합니다.
Kmeixner

14
Kmeixner, 당신은 그가 코멘트에 너무 많이 쓰길 기대합니까? 상식을 적용하고 로봇이되는 것을 그만두십시오. 이 커뮤니티는 개발자가 삶을 어렵게 만들지 않도록 돕기위한 것입니다.
user1735921

이 귀중한 팁에 감사드립니다.
TenG

0

서버에 연결하고 호스트에 연결하려면 다음 단계를 수행해야합니다.

  1. 쓰기 mysql을 공개 MySQL의에
  2. 쓰다 ;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. Ctrl과 X를 눌러 mysql을 종료하십시오.
  4. 쓰다 nano /etc/mysql/my.cnf
  5. my.cnf 폴더에 bind-address = 127.0.0.1 전에 # 쓰기
  6. # bind-address = 127.0.0.1
  7. control + X로 my.cnf 폴더 저장
  8. 쓰다 service mysql restart
  9. 호스트에서 navicat을 통해 연결할 수 있습니다.

0

@Malvineaus 답변에 동기를 부여하여 직접 시도했지만 저에게 효과가 없다는 것을 알았습니다.

'192.168.1. %'또는 '192.168.1.0/255.255.255.0'으로 서브넷 마스크를 지정할 수 있지만 서브넷은 항상 완전한 옥텟에 있어야합니다. https://mariadb.com/kb/en/create-user/#host-name-component를 참조 하십시오 . 결과적으로 하나의 사양 방식과 다른 방식 간의 기능은 동일합니다.

예를 들어 '192.168.1.0/255.255.255.128'은 완전한 옥텟 경계에 있지 않기 때문에 작동하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.