모든 원격 연결 허용, 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
'Development Tip' 카테고리의 다른 글
Java에서 비트 시프 팅은 어떻게 작동합니까? (0) | 2020.12.09 |
---|---|
로컬 네트워크의 다른 컴퓨터에서 webrick / rails에 액세스 (0) | 2020.12.09 |
C # WPF의 콤보 상자에서 선택한 값 가져 오기 (0) | 2020.12.09 |
Java는 문자열의 SHA-1 다이제스트에 대한 16 진 표현을 계산합니다. (0) | 2020.12.09 |
iOS에서 짧은 소리 재생 (0) | 2020.12.09 |