원격 액세스를위한 MySQL 추가 사용자


148

로 사용자 user@'%'를 만들었습니다 password 'password. 그러나 나는 연결할 수 없습니다 :

mysql_connect('localhost:3306', 'user', 'password');

user를 만들었을 때 user@'localhost'연결할 수있었습니다. 왜? '%'는 (는) 모든 호스트의 의미가 아닙니까?


user @ localhost 및 user @ %의 비밀번호는 일반적으로 권한과 다릅니다.
호세 마누엘 고메즈 Alvarez

답변:


377

원격으로 연결하려면 my.cnf의 머신 IP 주소에 MySQL 바인드 포트 3306이 있어야합니다. 그런 다음 localhost 및 '%'와일드 카드에서 사용자를 작성하고 모든 DB에 대한 권한을 부여해야합니다 . 아래를보십시오 :

my.cnf (Windows의 my.ini)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

그때

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;

OS에 따라 원격 연결을 허용하기 위해 포트 3306을 열어야 할 수도 있습니다.


1
이것은 WebFaction 개인 MySQL 인스턴스를 사용하는 데 도움이되었습니다. 나는 당신의 CREATE USER와 GRANT ALL 단계를 설정 다음 mysql.default_port = <private instance port>내 php.ini 파일에 다음 사용 127.0.0.1내 DB의 호스트 이름을 통해
SPEX

굉장히 유용하다. 단지 의견입니다. my.cnf에 다른 구성 파일이 포함될 수 있으므로 관련 행이 다른 곳에있을 수 있습니다. my.cnf에서! include로 시작하는 행을 찾으십시오. bind-address가 my.cnf에 없으면 포함 된 파일에있을 수 있습니다.
tru7

my.cnf 파일은 어디에 있습니까?
Vladimir Despotovic

7
FLUSH의 특권 잊지 마세요)
volkovmqx

4
왜 localhost와 %?

21

지침을 따르십시오 (Windows에서는 1 ~ 3 단계가 필요하지 않음).

  1. 편집 할 mysql 구성을 찾으십시오.

    /etc/mysql/my.cnf(Mysql 5.5)

    /etc/mysql/conf.d/mysql.cnf(Mysql 5.6+)

  2. bind-address=127.0.0.1구성 파일 변경에서 찾기 bind-address=0.0.0.0(바인드 주소를 인터페이스 IP 중 하나로 설정하거나 0.0.0.0을 사용하는 것처럼)

  3. 콘솔에서 실행되는 mysql 서비스를 다시 시작하십시오. service restart mysql

  4. 원격 연결을위한 안전한 비밀번호로 사용자를 작성하십시오. mysql에서 다음 명령을 실행하려면 (Linux 사용자가 mysql 콘솔 실행에 도달 mysql하고 root run에 암호를 설정 한 경우 mysql -p) :

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`

이제 원격 연결 기능을 가진 이름 user과 비밀번호를 safe_password가진 사용자가 있어야 합니다.


2
나를 위해 일한 bind-address = 0.0.0.0 ...을 변경하십시오. 특권 부여
zwitterion

12

어떤 DB 사용자입니까? 이 예를 봐

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

"%"연산자는 네트워크의 모든 컴퓨터를 의미합니다.

aspesa shows와 같이 사용자를 생성하거나 업데이트해야합니다. 모든 MySQL 사용자를 찾으십시오.

SELECT user,password,host FROM user;

사용자를 설정하자마자 다음과 같이 연결할 수 있어야합니다.

mysql -h localhost -u gmeier -p

그것이 도움이되기를 바랍니다


일반적으로 모든 db에 대해 DB를 선택하지 않고 연결하고 싶습니다. codemysql_connect ( 'localhost : 3306', 'user', 'password'); code
user2333586

Windows, Linux에서 어떤 OS를 사용하고 있습니까?
apesa

창문. server 서버.
user2333586

IP 주소가 포트 3306에 바인딩되어 있는지 확인해야합니다. Windows에서는 netstat -n을 사용하여 IP에 바인딩 된 포트를 확인할 수 있습니다. 127.0.0.1:3306이 표시되면 localhost 이외의 다른 곳에서 연결할 수 없습니다
apesa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.