development

모든 IP 주소에서 MySQL 데이터베이스에 대한 원격 액세스 권한 부여

big-blog 2020. 4. 1. 08:02
반응형

모든 IP 주소에서 MySQL 데이터베이스에 대한 원격 액세스 권한 부여


이 명령을 알고 있습니다.

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

그러나이 원격 MySQL 데이터베이스에 액세스하기 위해 특정 IP 주소 만 부여 할 수 있습니다. 원격 호스트가이 MySQL 데이터베이스에 액세스 할 수 있도록하려면 어떻게해야합니까? 어떻게해야합니까? 기본적으로 나는이 데이터베이스를 공개하여 모든 사람들이 액세스 할 수 있도록합니다.


TO 'user'@'%'

%는 와일드 카드 입니다. 필요한 경우 '%.domain.com'또는 '%.123.123.123'이와 같은 작업을 수행 할 수도 있습니다 .


원격 액세스 활성화 (Grant) 홈 / 자습서 / Mysql / 원격 액세스 활성화 (Grant) 원격 시스템에서 mysql 서버에 연결하려고 시도하고 아래와 같이 오류가 발생하면이 문서가 도움이됩니다.

오류 1130 (HY000) : '1.2.3.4'호스트는이 MySQL 서버에 연결할 수 없습니다

mysql 설정 변경

mysql 설정 파일 편집으로 시작

vim /etc/mysql/my.cnf

다음 줄을 주석으로 처리하십시오.

#bind-address           = 127.0.0.1
#skip-networking

스킵 네트워킹 라인을 찾지 못하면 추가하고 주석 처리하십시오.

mysql 서버를 다시 시작하십시오.

~ /etc/init.d/mysql restart

GRANT 권한 변경

위의 변경 후에도 원격 액세스 권한을 얻지 못하지만 모든 데이터베이스에 액세스 할 수있는 것은 아닙니다.

기본적으로 사용중인 mysql 사용자 이름과 비밀번호는 로컬로 mysql-server에 액세스 할 수 있습니다. 따라서 권한을 업데이트해야합니다.

모든 머신에서 액세스하려면 아래와 같은 명령을 실행하십시오. (교체 USERNAMEPASSWORD자격 증명에 의해.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

다음과 같은 명령을 실행하여 특정 IP에서 액세스하십시오. (교체 USERNAMEPASSWORD자격 증명에 의해.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

1.2.3.4를 IP로 바꿀 수 있습니다. 위의 명령을 여러 번 실행하여 여러 IP의 액세스 권한을 부여 할 수 있습니다.

별도의 USERNAME& PASSWORD원격 액세스를 지정할 수도 있습니다.

다음을 통해 최종 결과를 확인할 수 있습니다.

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

마지막으로 다음을 실행해야 할 수도 있습니다.

mysql> FLUSH PRIVILEGES;

연결 테스트

터미널 / 명령 줄에서 :

mysql -h HOST -u USERNAME -pPASSWORD

mysql 쉘이 있다면 show 데이터베이스를 실행하는 것을 잊지 마십시오. 원격 컴퓨터에서 올바른 권한이 있는지 확인하십시오.

보너스 팁 : 액세스 취소

실수로 사용자에게 액세스 권한을 부여한 경우에는 취소 옵션이 더 좋습니다.

다음은 모든 컴퓨터에서 USERNAME에 대한 모든 옵션을 취소합니다.

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

REVOKE 명령을 실행 한 후 USAGE 권한이 표시되면 괜찮습니다. 전혀 특권이없는 것만 큼 좋습니다. 취소 할 수 있는지 확실하지 않습니다.


위 단계가 완료되었고 MySql 포트 3306에 원격으로 액세스 할 수 있다고 가정합니다. mysql 설정 파일에서 공개 IP 주소를 바인딩하는 것을 잊지 마십시오.

예를 들어 내 우분투 서버에서 :

#nano /etc/mysql/my.cnf

파일에서 [mysqld] 섹션 블록을 검색 하고 새 바인드 주소를 추가하십시오 (이 예에서는 192.168.0.116). 이런 식으로 보일 것입니다

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

원하는 경우 th localhost (127.0.0.1) 바인딩을 제거 할 수 있지만, 로컬 시스템의 서버에 액세스하려면 IP 주소를 지정해야합니다.

그런 다음 마지막 단계는 MySql 서버를 다시 시작하는 것입니다 (우분투에서)

stop mysql

start mysql

또는 #/etc/init.d/mysql restart다른 시스템

이제 다음을 통해 MySQL 데이터베이스에 원격으로 액세스 할 수 있습니다.

mysql -u username -h 192.168.0.116 -p

이것으로 혼란스러워하는 사람이라면 여기에 내가 권한을 부여하는 방법이 있습니다. 누군가에게 도움이되기를 바랍니다.

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

언급 된 바와 같이 %와일드 카드이므로 모든 IP 주소를 데이터베이스에 연결할 수 있습니다. 내가 여기서 가정한다는 것은 당신이 연결할 때 root(기본이지만) 사용자라는 이름을 갖게 될 것 입니다. 루트 암호를 입력하면 좋습니다. '사용자 루트 주위에 작은 따옴표 ( ) 가 없습니다 .


로컬 호스트를 통한 연결을 활성화하려면 구성 파일을 변경해야합니다.

원격 IP를 통해 연결하려면 "루트"사용자로 로그인하여 mysql에서 아래 쿼리를 실행하십시오.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

원격 호스트뿐만 아니라 로컬 호스트에서도 액세스 할 수있는 새 사용자가 생성됩니다.

또한 /etc/mysql/my.cnf에있는 my.cnf 파일에서 아래 행을 주석으로 처리하십시오.

bind-address = 127.0.0.1

를 사용하여 mysql을 다시 시작하십시오.

sudo service mysql restart

이제 mysql에 원격으로 연결할 수 있습니다.


이 명령을 사용하십시오 :

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

그때:

FLUSH PRIVILEGES; 

그런 다음 "/etc/mysql/mysql.conf.d/mysqld.cnf"파일에서 아래 행을 주석 처리하십시오 (필수)!

bind-address = 127.0.0.1 

나를 위해 작동합니다!


다음을 실행하십시오.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

그런 다음 지정한 IP 주소에서 연결을 시도하십시오.

mysql -h address-of-remove-server -u root -p   

연결할 수 있어야합니다.


다음 명령을 통해 MariaDB의 문제를 해결할 수 있습니다 .

노트 :

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

%와일드 카드입니다. 이 경우 모든 IP 주소를 나타냅니다.


GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'

모든 IP 주소에서 사용자와 연결할 수있게하려면 다음을 수행하십시오.

mysql 서버가 원격 연결을 수락하도록 허용하십시오. 이 열린 mysqld.conf 파일의 경우 :

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

"bind-address"로 시작하는 행을 검색하고 값을 0.0.0.0으로 설정하십시오.

bind-address                    = 0.0.0.0

마지막으로 파일을 저장하십시오.

이제 systemd이전 service명령을 사용하거나 이전 명령을 사용 하여 mysql 서버를 다시 시작하십시오 . 운영 체제에 따라 다릅니다.

sudo systemctl restart mysqld.service

마지막으로 mysql 서버는 이제 원격 연결을 수락 할 수 있습니다.

이제 사용자를 생성하고 권한을 부여해야하므로이 사용자로 원격으로 로그인 할 수 있습니다.

루트 또는 루트 권한을 가진 다른 사용자로 MySQL 데이터베이스에 연결하십시오.

mysql -u root -p

이제 localhost 및 '%'와일드 카드에서 원하는 사용자를 만들고 모든 DB에 대한 권한을 부여하십시오.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

그때,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

마지막으로 권한을 플러시하는 것을 잊지 마십시오

FLUSH PRIVILEGES;

도움이 되었기를 바랍니다 ;)


  • 관리자를 사용하여 MYSQL 시작
    • mysql -u admin-user -p (비밀번호 입력 프롬프트)
  • 새 사용자를 작성하십시오.
    • 'password'로 식별 된 'newuser'@ '%'사용자 작성; (%-> 애니 호스트)
  • 그랜트 특권 :
    • db_name에서 GRANT 선택, 삭제, 삽입, 업데이트. * TO 'newuser'@ '%';
    • 홍당무;

EC2 인스턴스를 실행중인 경우 MYSQL / Aurura를 사용하여 보안 그룹에 인바운드 규칙을 추가하는 것을 잊지 마십시오.


파일 편집 :

/etc/mysql/percona-server.cnf

아래 코드를 파일에 추가하십시오.

[mysqld] bind-address = 0.0.0.0

원격 액세스를위한 사용자를 작성하십시오.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

모든 리눅스 서버가 작동합니다.

MSWin c : \ 위치 찾기 위치 \ 파일 경로


데이터베이스 MySQL 서버 8에 원격으로 액세스하려면 :

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

다음과 같은 데이터베이스에 사용자를 만드십시오.

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

그런 다음

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfbind-address = 127.0.0.1다음으로 변경하십시오.bind-address = 0.0.0.0

그런 다음 모든 IP에서 해당 데이터베이스에 연결할 수 있습니다.


를 열고 mysql console다음 명령을 실행하십시오 (데이터베이스 이름, 사용자 이름 및 비밀번호 입력).

yourdatabasename에 모두 부여하십시오. * 'yourRootPassword'에 의해 식별 된 admin @ '%';

그런 다음 다음을 실행하십시오.

홍당무;

명령 줄을 열고로 /etc/mysql/mysql.conf.d/mysqld.cnf편집기를 사용 하여 파일 엽니 다 root privileges.

예를 들면 다음과 같습니다.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

그런 다음 아래 줄을 주석으로 처리하십시오.

바인드 주소 = 127.0.0.1

명령을 사용하여 변경 사항을 반영하려면 mysql을 다시 시작하십시오.

sudo service mysql restart

즐겨 ;)


mysql 설정 파일을 변경해야합니다 :

mysql 설정 파일 편집으로 시작

vim /etc/mysql/my.cnf

더하다:

bind-address = 0.0.0.0

cPanel과 같은 웹 사이트 패널 %에서 허용 된 호스트 이름에 단일 (백분율 부호)을 추가 하여 MySQL 데이터베이스에 액세스 할 수 있습니다.

싱글 %추가하면 데스크탑 응용 프로그램에서도 모든 IP 또는 웹 사이트에서 데이터베이스에 액세스 할 수 있습니다.


예를 들어 CentOS에서

sudo gedit /etc/mysql/my.cnf

다음 줄을 주석으로 처리하십시오.

# 바인드 주소 = 127.0.0.1

그때

sudo 서비스 mysqld 재시작


모든 IP 주소에서 데이터베이스에 대한 원격 액세스 권한을 부여하려면 mysql 명령을 실행 한 후 다음 명령을 실행하십시오.

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;

Ubuntu에서 효과가 있었던 것은 사용자에게 모든 권한을 부여하는 것입니다.

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

바인드 주소를 /etc/mysql/mysql.conf.d/mysqld.cnf다음으로 설정하십시오 .

bind-address            = 0.0.0.0

그런 다음 mysql 데몬을 다시 시작하십시오.

service mysql restart

/etc/my.cnf를 편집하여 모든 보안을 비활성화 할 수 있습니다 :

skip-grant-tables

참고 URL : https://stackoverflow.com/questions/8348506/grant-remote-access-of-mysql-database-from-any-ip-address

반응형