programing

모든 호스트에서 MySQL 루트 액세스

shortcode 2022. 10. 5. 21:37
반응형

모든 호스트에서 MySQL 루트 액세스

리모트 Ubuntu 머신에 MySQL 서버를 설치했습니다.root사용자가 정의되어 있습니다.mysql.user테이블:

mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

사용자와 접속할 수 있다root같은 리모트 머신의 명령줄 인터페이스에서 표준으로mysql고객.인터넷상의 모든 호스트로부터의 루트액세스를 허가하고 싶기 때문에, 다음의 행을 추가하려고 했습니다(이 행은 이전 덤프의 첫 번째 행과 완전히 중복됩니다만,host열):

mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

단, 퍼스널 PC의 클라이언트는 계속 다음과 같이 말합니다(서버의 IP를 숨겼습니다).

SQL 오류 (2003) :'46.x.x.x'의 MySQL 서버에 연결할 수 없습니다(10061)

인증 오류인지 네트워크 오류인지 알 수 없습니다.서버 방화벽에서 0.0.0/0 대해 포트 3306/TCP를 활성화했습니다.이것도 괜찮습니다.

업데이트:

코멘트에 기재된 바와 같이 MySql 8에서는 먼저 사용자를 명시적으로 작성해야 명령어가 다음과 같이 표시됩니다.

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

원답:

이 프로세스에는 두 가지 단계가 있습니다.

a) 권한을 부여합니다.root 사용자가 이 대체를 사용하여 실행할 때'password'현재 루트 패스워드를 사용합니다.

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

b) 모든 주소에 바인드:

가장 쉬운 방법은 자신의 행에 코멘트를 넣는 것입니다.my.cnf파일:

#bind-address = 127.0.0.1 

mysql을 재시작합니다.

service mysql restart

기본적으로는 localhost에만 바인드되지만 회선을 코멘트하면 검출된 모든 인터페이스에 바인드됩니다.행을 코멘트 아웃 하는 것은,bind-address=*.

mysql 서비스가 바인드된 위치를 확인하려면 다음 절차를 수행합니다.

netstat -tupan | grep mysql

Ubuntu 16 업데이트:

컨피규레이션파일은 (지금)

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

(최소한 표준 Ubuntu 16의 경우)

다음 쿼리를 실행합니다.

use mysql;
update user set host='%' where host='localhost'

메모: 실가동용으로는 권장되지 않습니다.

MYSQL 8.0 - open mysql 명령줄 클라이언트

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';  

mysql을 사용하다

UPDATE mysql.user SET host='%' WHERE user='root';  

mysql 서비스 재시작

가끔씩

bind-address = 127.0.0.1

그래야 한다

bind-address =*

Raspbian에서 실행되고 있는 MariaDB - 바인드 주소를 포함하는 파일은 정확히 파악하기 어렵습니다.MariaDB는 이 주제에 대해 별로 도움이 되지 않는 정보를 가지고 있다.

나는 사용했다

# sudo grep -R bind-address /etc 

어디 있는지 알아낼 수 있을 거야

또한 위의 모든 사람들이 지적한 것처럼 mysql에서 권한과 호스트를 설정해야 했습니다.

또, 라즈베리 파이에의 리모트 접속용의 3306 포토를 여는 즐거움도 있었습니다.드디어 iptables-persistent를 사용했습니다.

이제 모든 것이 잘 작동합니다.

AWS LightSail을 사용하고 있는데 인스턴스가 작동하려면 다음을 변경해야 합니다.

bind-address = 127.0.0.1

로.

bind-address = <Private IP Assigned by Amazon>

그 후 원격으로 연결할 수 있었습니다.

OS에 다수의 네트워크가 접속되어 있는 경우는, my.conf 파일의 bind-address내의 이 네트워크 중 하나를 지정할 필요가 있습니다.예:

[mysqld]
bind-address = 127.100.10.234

이 IP는 ethX 설정에서 취득한 것입니다.

제 경우, "bind-address" 설정이 문제였습니다.에서 이 합니다.my.cnfmysql의 경우 어떤 이유로 기본값을 127.0.0.1로 설정했기 때문에 도움이 되지 않았습니다.

MySql이 현재 어떤 설정을 사용하고 있는지 확인하려면 로컬 상자에서 명령줄을 엽니다.

mysql -h localhost -u myname -pmypass mydb

현재 설정을 읽습니다.

Show variables where variable_name like "bind%"

모든 호스트로부터의 액세스를 허가하는 경우는, 0.0.0 이 표시됩니다. 않은 「」를 ./etc/mysql/my.cnf mysqld ] bind - address 정 。

bind-address=0.0.0.0

마지막으로 MySql 서버를 재시작하여 새 설정을 선택합니다.

sudo service mysql restart

다시 시도하여 새 설정이 선택되었는지 확인하십시오.

「 」를 합니다.bind-address = 0.0.0.0 /etc/mysql/mysql.conf.d/mysqld.cnf에서 mysql을 사용할 수 .rootIP를 사용하다

mysql-8.0에서 동작하는 명령어는 다음과 같습니다.다른 명령어는 오류로 인해 실패하였습니다.syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'abcd'' at line 1

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
UPDATE mysql.user SET host='%' WHERE user='root';

mysql 클라이언트를 재시작합니다.

sudo service mysql restart

mysql_update그게 네게 필요한 거야

MySql이 이미 이 작업을 수행할 수 있는 도구를 만들었는데 왜 이 문제를 해결하기 위해 더 복잡한 방법을 따르는지 모르겠습니다.

언급URL : https://stackoverflow.com/questions/11223235/mysql-root-access-from-all-hosts

반응형