Mysql menambahkan pengguna untuk akses jarak jauh

148

Saya membuat pengguna user@'%'dengan password 'password. Tapi saya tidak bisa terhubung dengan:

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

Ketika saya membuat pengguna user@'localhost', saya dapat terhubung. Mengapa? Apakah '%' tidak berarti dari host APAPUN?

user2333586
sumber
Perhatikan bahwa kata sandi untuk pengguna @ localhost dan pengguna @% secara umum berbeda, serta hak istimewa.
Jose Manuel Gomez Alvarez

Jawaban:

378

Untuk menghubungkan dari jarak jauh Anda harus memiliki MySQL bind port 3306 ke alamat IP mesin Anda di my.cnf. Maka Anda harus membuat pengguna di wildcard localhost dan '%' dan memberikan izin pada semua DB . Lihat di bawah:

my.cnf (my.ini di windows)

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

kemudian

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

Kemudian

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

Tergantung pada OS Anda, Anda mungkin harus membuka port 3306 untuk memungkinkan koneksi jarak jauh.

apesa
sumber
1
Ini membantu saya menggunakan instance MySQL WebFaction pribadi. Saya mengikuti langkah CREATE USER dan GRANT ALL, atur mysql.default_port = <private instance port>di php.ini saya, dan kemudian digunakan 127.0.0.1untuk nama host db saya
spex
Sangat berguna. Hanya komentar. my.cnf dapat menyertakan file konfigurasi lain sehingga baris yang relevan mungkin berada di tempat lain. Di my.cnf cari baris yang diawali dengan! Sertakan, jika bind-address tidak ada di my.cnf, ia bisa ditemukan di file yang disertakan.
tru7
Di mana file my.cnf?
Vladimir Despotovic
7
jangan lupa untuk FLUSH PRIVILEGES;)
volkovmqx
4
Mengapa localhost dan%?
malam
21

Ikuti instruksi (langkah 1 hingga 3 tidak diperlukan di windows):

  1. Temukan konfigurasi mysql untuk diedit:

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

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

  2. Temukan bind-address=127.0.0.1perubahan file config bind-address=0.0.0.0(Anda dapat menetapkan alamat bind ke salah satu ips antarmuka Anda atau seperti saya menggunakan 0.0.0.0)

  3. Mulai ulang layanan mysql berjalan di konsol: service restart mysql

  4. Buat pengguna dengan kata sandi aman untuk koneksi jarak jauh. Untuk melakukan ini jalankan perintah berikut di mysql (jika Anda pengguna linux untuk mencapai mysql console run mysqldan jika Anda mengatur kata sandi untuk root run mysql -p):

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

Sekarang Anda harus memiliki pengguna dengan nama userdan kata sandi safe_passworddengan kemampuan koneksi jarak jauh.

MSS
sumber
2
ubah bind-address = 0.0.0.0 ... yang berfungsi untuk saya. dan berikan hak istimewa
zwitterion
12

untuk apa DB pengguna? lihat contoh ini

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)

jadi untuk kembali ke Anda mempertanyakan operator "%" berarti semua komputer di jaringan Anda.

seperti acara aspesa, saya juga yakin Anda harus membuat atau memperbarui pengguna. cari semua pengguna mysql Anda:

SELECT user,password,host FROM user;

segera setelah Anda mengatur pengguna Anda, Anda harus dapat terhubung seperti ini:

mysql -h localhost -u gmeier -p

semoga membantu

caramba
sumber
umumnya, untuk semua db. Saya hanya ingin terhubung, bukan untuk memilih DB. codemysql_connect ('localhost: 3306', 'user', 'password'); code
user2333586
OS apa yang Anda gunakan, Windows, Linux ??
apesa
windows. server wamp.
user2333586
Anda perlu memastikan alamat IP Anda terikat ke port 3306. Di windows Anda mungkin menggunakan netstat -n untuk melihat port apa yang terikat ke IP Anda. Jika Anda melihat 127.0.0.1:3306 Anda tidak akan dapat terhubung dari apa pun selain localhost
apesa