Development Tip

모든 원격 연결 허용, MySQL

yourdevel 2020. 12. 9. 21:54
반응형

모든 원격 연결 허용, MySQL


저는 SQL Server를 사용하고 있었고 현재 프로젝트에 MySQL을 사용하고 있습니다. SQL Server를 사용하면 개발자가 호스트, 사용자 이름, 암호를 알고있는 경우 로컬 컴퓨터의 원격 데이터베이스에 연결할 수 있습니다. 하지만 MySQL을 사용하면 개발자에게 로컬 컴퓨터에서 액세스 권한을 부여하기 위해 MySQL에 로그인하여 다음을 실행해야했습니다.

GRANT ALL ON *.* to user@address IDENTIFIED BY 'password'; 
flush privileges;

address개발자 컴퓨터의 IP 주소는 어디에 있습니까 ? 물론 네트워크가 바뀌면 다시 실행해야합니다. SQL Server에서 경험 한 것과 같은 모든 원격 연결을 허용하는 방법이 있습니까? 아니면 어떤 이유로 든 나쁜 생각입니까? 아직 사용자 이름과 비밀번호가 있습니다. 약간 혼란 스럽습니다.

또한 이것은 개발 데이터베이스이며 내부 네트워크에서만 액세스 할 수 있습니다. 모든 사람에게 프로덕션 데이터베이스에 대한 액세스 권한을 부여하는 것이 왜 나쁜 생각인지 이해합니다.


위에서 Ryan이 지적했듯이 필요한 명령은

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

그러나 문서에이 작업이 작동 localhost하려면 동일한 사용자에 대해 다른 사용자 계정을 만들어야한다고 나와 있습니다. 그렇지 않으면 mysql_install_db보다 구체적인 호스트 열이 있기 때문에에 의해 자동으로 생성 된 익명 계정 이 우선합니다.

다시 말해; 사용자 user가 모든 서버에서 연결할 수 있도록하기 위해 다음과 같이 2 개의 계정을 생성해야합니다.

GRANT ALL ON *.* to user@localhost IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

여기 에서 전체 문서를 읽으 십시오.

그리고 다음은 참고 용으로 관련된 부분입니다.

루트로 서버에 연결 한 후 새 계정을 추가 할 수 있습니다. 다음 문은 GRANT를 사용하여 4 개의 새 계정을 설정합니다.

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';

이러한 문으로 생성 된 계정에는 다음과 같은 속성이 있습니다.

두 개의 계정은 monty의 사용자 이름과 some_pass의 암호를 가지고 있습니다. 두 계정 모두 모든 작업을 수행 할 수있는 모든 권한을 가진 수퍼 유저 계정입니다. 'monty'@ 'localhost'계정은 로컬 호스트에서 연결할 때만 사용할 수 있습니다. 'monty'@ '%'계정은 호스트 부분에 '%'와일드 카드를 사용하므로 모든 호스트에서 연결하는 데 사용할 수 있습니다.

monty로 어디서나 연결할 수 있으려면 monty에 대한 두 계정이 모두 필요합니다 . localhost 계정이 없으면 monty가 로컬 호스트에서 연결할 때 mysql_install_db에 의해 생성 된 localhost의 익명 사용자 계정이 우선합니다. 결과적으로 monty는 익명 사용자로 취급됩니다. 그 이유는 익명 사용자 계정이 'monty'@ '%'계정보다 더 구체적인 호스트 열 값을 가지므로 사용자 테이블 정렬 순서가 더 일찍 나오기 때문입니다. (사용자 테이블 정렬은 섹션 6.2.4,“액세스 제어, 1 단계 : 연결 확인”에서 설명합니다.)

내가 이것을 오해하지 않는 한 그것은 나에게 어리석은 것처럼 보입니다.


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

[mysqld]
skip-grant-tables

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

특정 사용자가 어디서나 로그온 할 수 있습니다.

계정이 도용되는 경우와 같이 일부 보안 제어를 제거하기 때문에 좋지 않습니다.


어디에서나 원격으로 연결할 수 있도록 mysql을 설치하고 설정하면 mysql_secure_installation과 함께 작동하지 않습니다! ( https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html )

Ubuntu에서 다음을 사용하여 mysql을 설치합니다.

sudo apt-get install mysql-server

/etc/mysql/my.cnf 아래에 있습니다.

[mysqld]
#### Unix socket settings (making localhost work)
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock

#### TCP Socket settings (making all remote logins work)
port            = 3306
bind-address = 0.0.0.0

다음을 사용하여 서버에서 DB에 로그인

mysql -u 루트 -p

아래 문을 사용하여 DB 사용자 생성

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’;

방화벽 열기 :

sudo ufw allow 3306

mysql 다시 시작

sudo service mysql restart

또한 구성 파일에서 아래 줄을 비활성화해야합니다. bind-address = 127.0.0.1


mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%'

Mabey는 다음 만 필요합니다.

1 단계 :

grant all privileges on *.* to 'user'@'IP' identified by 'password';

또는

grant all privileges on *.* to 'user'@'%' identified by 'password';

2 단계 :

sudo ufw allow 3306

3 단계 :

sudo service mysql restart

참고 URL : https://stackoverflow.com/questions/10236000/allow-all-remote-connections-mysql

반응형