memberikan akses jarak jauh dari database MySQL dari alamat IP apa pun

282

Saya mengetahui perintah ini:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Tapi kemudian itu hanya memungkinkan saya untuk memberikan alamat IP tertentu untuk mengakses database MySQL jarak jauh ini. Bagaimana jika saya menginginkannya agar host jarak jauh dapat mengakses database MySQL ini? Bagaimana aku melakukan itu? Pada dasarnya saya membuat basis data ini publik sehingga semua orang dapat mengaksesnya.

adit
sumber
1
Sebelum melakukan ini, pertimbangkan implikasi keamanan
e18r
7
tidak setiap sistem adalah sistem produksi. beberapa orang membutuhkan ini untuk pengembangan.
Conrad Jones

Jawaban:

274
TO 'user'@'%'

% adalah wildcard - Anda juga dapat melakukan '%.domain.com'dan '%.123.123.123'dan hal-hal seperti itu jika diperlukan.

Ariel
sumber
@ Kristopolous Ada banyak hal yang dapat menyebabkan itu. Perintah ini adalah tentang akses jarak jauh (dua mesin yang berbeda). Jika bukan itu yang Anda lakukan, ini bukan perintah yang tepat. Anda masih memerlukan kata sandi yang benar dan hal-hal lain.
Ariel
11
Anda harus menggunakan "hak istimewa flush;" agar perubahan mulai berlaku
Didier Sampaolo
Trik saat menghubungkan ke instance db yang berjalan pada instance OS yang sama (mis. Mesin pengembangan Anda), adalah meneruskan dalam -h my_machine_nameparameter. Ini menipu klien untuk mengidentifikasi Anda sebagai 'user'@my_machine_name.example.com, bukan 'user'@localhost. Dengan cara ini Anda tidak perlu membuat dan mengelola akun ganda dan hibah untuk keduanya localhostdan akses jaringan. Dan, tentu saja, harus yakin mysqldpasti 0.0.0.0vs 127.0.0.1.
Charlie Reitzel
173

Aktifkan Remote Access (Grant) Beranda / Tutorial / Mysql / Aktifkan Remote Access (Grant) Jika Anda mencoba untuk terhubung ke server mysql Anda dari mesin jarak jauh, dan mengalami kesalahan seperti di bawah ini, artikel ini adalah untuk Anda.

GALAT 1130 (HY000): Host '1.2.3.4' tidak diizinkan untuk terhubung ke server MySQL ini

Ubah konfigurasi mysql

Mulailah dengan mengedit file konfigurasi mysql

vim /etc/mysql/my.cnf

Komentari baris berikut.

#bind-address           = 127.0.0.1
#skip-networking

Jika Anda tidak menemukan jalur lewati jaringan, tambahkan dan komentari.

Mulai ulang server mysql.

~ /etc/init.d/mysql restart

Ubah hak istimewa GRANT

Anda mungkin terkejut melihat bahkan setelah perubahan di atas Anda tidak mendapatkan akses jarak jauh atau mendapatkan akses tetapi tidak dapat ke semua database.

Secara default, nama pengguna dan kata sandi mysql yang Anda gunakan diizinkan untuk mengakses server mysql secara lokal. Jadi perlu memperbarui hak istimewa.

Jalankan perintah seperti di bawah ini untuk mengakses dari semua mesin. (Ganti USERNAMEdan PASSWORDoleh kredensial Anda.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Jalankan perintah seperti di bawah ini untuk memberikan akses dari IP tertentu. (Ganti USERNAMEdan PASSWORDoleh kredensial Anda.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Anda dapat mengganti 1.2.3.4 dengan IP Anda. Anda dapat menjalankan perintah di atas berkali-kali untuk memberikan akses dari beberapa IP.

Anda juga dapat menentukan terpisah USERNAME&PASSWORD untuk akses jarak jauh.

Anda dapat memeriksa hasil akhir dengan:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Terakhir, Anda mungkin juga perlu menjalankan:

mysql> FLUSH PRIVILEGES;

Tes koneksi

Dari terminal / command-line:

mysql -h HOST -u USERNAME -pPASSWORD

Jika Anda mendapatkan shell mysql, jangan lupa untuk menjalankan show show; untuk memeriksa apakah Anda memiliki hak istimewa dari mesin jarak jauh.

Tip-Bonus: Cabut Akses

Jika Anda secara tidak sengaja memberikan akses ke pengguna, lebih baik gunakan opsi pencabutan.

Berikut ini akan mencabut semua opsi untuk USERNAME dari semua mesin:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Jika Anda melihat hak istimewa USAGE setelah menjalankan perintah REVOKE, tidak masalah. Ini sama baiknya dengan tidak ada hak istimewa sama sekali. Saya tidak yakin apakah itu dapat dicabut.

Siddharth Kumar
sumber
7
Perhatikan bahwa saya harus mengubah /etc/mysql/mysql.conf.d/mysqld.cnffile alih-alih /etc/mysql/my.cnfmengomentari bind-addressbagian tersebut. The #skip-networkinggaris hilang dan tidak boleh ada pengaruh penambahan dan komentar baris.
Pawan
1
Pada MariaDB 10.1.26, file konfigurasi adalah/etc/mysql/mariadb.conf.d/50-server.cnf
Kwadz
Jika Anda telah melakukan semua hal di atas dan masih tidak dapat terhubung, periksa pengaturan firewall Anda, mungkin memblokir port 3306atau port mana pun yang telah Anda siapkan
avn
37

Dengan asumsi bahwa langkah di atas selesai dan port MySql 3306 bebas untuk diakses dari jarak jauh; Jangan lupa untuk mengikat alamat ip publik di file konfigurasi mysql.

Misalnya di server ubuntu saya:

#nano /etc/mysql/my.cnf

Dalam file tersebut, cari blok bagian [mysqld] dan tambahkan alamat bind yang baru, dalam contoh ini adalah 192.168.0.116. Akan terlihat seperti ini

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

Anda dapat menghapus localhost (127.0.0.1) yang mengikat jika Anda memilih, tetapi kemudian Anda harus secara khusus memberikan alamat IP untuk mengakses server pada mesin lokal.

Kemudian langkah terakhir adalah me-restart server MySql (di ubuntu)

stop mysql

start mysql

atau #/etc/init.d/mysql restartuntuk sistem lain

Sekarang database MySQL dapat diakses dari jarak jauh dengan:

mysql -u username -h 192.168.0.116 -p
Waqas
sumber
/etc/init.d/mysql reloadharus mencukupi
Lorenz Lo Sauer
Saya hanya melakukan ini dan tidak dapat terhubung ke server mysql dari jarak jauh. Saya kemudian mencoba mengomentari bind-address dan itu berhasil. Saya juga mencoba masuk ke server dengan mysql -u <user> -p tanpa menentukan host dan berhasil, sehingga tampaknya "Anda dapat menghapus localhost (127.0.0.1) mengikat jika Anda memilih, tetapi kemudian Anda harus secara khusus berikan alamat IP untuk mengakses server pada mesin lokal. " tidak benar. (ubuntu 12.04 LTS server mysql Ver 14.14 Distrib 5.5.34)
Programster
5
The bind-addressdirektif menentukan alamat IP bahwa mysql server yang mendengarkan pada; bukan alamat IP tempat server menerima koneksi.
GoZoner
1
Setelah mengikuti setiap langkah itu tidak berhasil. Saya mendapatkan pesan kesalahan saat mengomentari bind-addresslocalhost atau alamat remotehost. mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
baermathias
Apakah mungkin untuk memberikan alamat seperti abc.abc:1234 bukan 192.168.0.116?
bielas
26

Bagi siapa saja yang meraba-raba, di sini adalah bagaimana saya harus memberikan hak istimewa, berharap itu membantu seseorang

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Seperti disebutkan %adalah wildcard dan ini akan memungkinkan alamat IP apa pun untuk terhubung ke database Anda. Asumsi yang saya buat di sini adalah ketika Anda terhubung Anda akan memiliki nama pengguna root(yang merupakan defaultnya). Masukkan kata sandi root dan Anda siap melanjutkan. Perhatikan bahwa saya tidak memiliki tanda kutip tunggal ( ') di sekitar root pengguna.

Dev
sumber
Mengapa menghapus tanda kutip tunggal dari pengguna itu penting? Mengapa ini berbeda dari jawaban lain (dan manual)?
DMCoding
26

Diperlukan perubahan file konfigurasi untuk mengaktifkan koneksi melalui localhost.

Untuk terhubung melalui IP jarak jauh, Masuk sebagai pengguna "root" dan jalankan kueri di bawah ini di mysql.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Ini akan membuat pengguna baru yang dapat diakses di localhost dan juga dari IP jarak jauh.

Berikan komentar pada baris di bawah ini dari file my.cnf Anda yang terletak di /etc/mysql/my.cnf

bind-address = 127.0.0.1

Mulai ulang mysql Anda menggunakan

sudo service mysql restart

Sekarang Anda harus dapat terhubung dari jarak jauh ke mysql Anda.

harishannam
sumber
2
Ini tidak menjawab pertanyaan.
CHarris
1
@ChristopheHarris kenapa kamu merasa begitu? Jawabannya jelas memberikan instruksi langkah demi langkah tentang cara membuat pengguna baru di MySQL yang memungkinkan akses localhost dan jarak jauh ke DB menggunakan pengguna itu. Bisakah Anda menjelaskan?
harishannam
1
Tidak bekerja untuk saya. Masih memiliki kesalahan yang sama. Tidak masalah apakah saya mencobanya dengan root atau pengguna baru: Tidak dapat terhubung ke server MySQL di 'xxx.xxx.xxx.xxx' ([Errno 61] Sambungan ditolak)
baermathias
21

Gunakan perintah ini:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Kemudian:

FLUSH PRIVILEGES; 

Kemudian komentari baris di bawah ini dalam file "/etc/mysql/mysql.conf.d/mysqld.cnf" (diperlukan!):

bind-address = 127.0.0.1 

Bekerja untukku!

Tomasz Czechowski
sumber
Sangat bagus. Pentingnya hibah. Jika tidak, banyak kesalahan untuk permintaan sepertiyour-password-does-not-satisfy-the-current-policy-requirements
Alejandro Teixeira Muñoz
21

Agar dapat terhubung dengan pengguna Anda dari alamat IP apa pun, lakukan hal berikut:

Izinkan server mysql untuk menerima koneksi jarak jauh. Untuk file mysqld.conf buka ini:

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

Cari baris yang dimulai dengan "bind-address" dan atur nilainya menjadi 0.0.0.0

bind-address                    = 0.0.0.0

dan akhirnya simpan file tersebut.

Catatan: Jika Anda menjalankan MySQL 8+, bind-addressarahan tidak akan ada dalam mysqld.cnffile secara default. Dalam hal ini, tambahkan arahan ke bagian bawah file /etc/mysql/mysql.conf.d/mysqld.cnf.

Sekarang restart server mysql, baik dengan systemdatau gunakan serviceperintah yang lebih lama . Ini tergantung pada sistem operasi Anda:

sudo systemctl restart mysql # for ubuntu    
sudo systemctl restart mysqld.service # for debian

Akhirnya, server mysql sekarang dapat menerima koneksi jarak jauh.

Sekarang kita perlu membuat pengguna dan memberinya izin, sehingga kita bisa masuk dengan pengguna ini dari jarak jauh.

Terhubung ke database MySQL sebagai root, atau pengguna lain dengan privilege root.

mysql -u root -p

sekarang buat pengguna yang diinginkan di localhost dan '%' wildcard dan berikan izin pada semua DB.

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'@'%';

Dan akhirnya jangan lupa untuk menyiram hak istimewa

FLUSH PRIVILEGES;

Catatan: Jika Anda telah mengkonfigurasi firewall di server database Anda, Anda juga perlu membuka port port 3306default MySQL untuk memungkinkan lalu lintas ke MySQL.

Semoga ini membantu ;)

Imtiaz Shakil Siddique
sumber
2
sudo systemctl restart mysqld.service untuk debian, saya harus menggunakan sudo systemctl restart mysql.service untuk ubuntu
ani0904071
Saya memperbarui jawaban saya dan menambahkan perintah restart mysql untuk kedua distro. thanks @ ani0904071
Imtiaz Shakil Siddique
17

Jalankan yang berikut ini:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Kemudian coba koneksi dari alamat IP yang Anda tentukan:

mysql -h address-of-remove-server -u root -p   

Anda harus dapat terhubung.

akhil.ov
sumber
15

Anda dapat menangani masalah MariaDB melalui perintah ini :

catatan:

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

%adalah wildcard. Dalam hal ini, ini merujuk ke semua alamat IP.

未来 陆家嘴 顶尖 的 投资 人
sumber
3
di mysql, apa yang perlu Anda lakukan adalah (1). Ganti konten my.cnf (2). pengguna remote yang bagus (3) berurusan dengan firewall Anda untuk mendengarkan port 3306.
未来 陆家嘴 顶尖 的 投资 人
Kamu menyelamatkan hariku. Menghargai itu!
Almett
8
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
pengguna3846464
sumber
7

Untuk mengakses jauh server database Mysql 8:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
Anil Rana
sumber
5
  • MULAI MYSQL menggunakan pengguna admin
    • mysql -u admin-user -p (ENTER PASSWORD ON PROMPT)
  • Buat pengguna baru:
    • BUAT PENGGUNA 'pengguna baru' @ '%' DIIDENTIFIKASI DENGAN 'kata sandi'; (% -> anyhost)
  • Berikan Hak Istimewa:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO 'newuser' @ '%';
    • PRIVILEGUS FLUSH;

Jika Anda menjalankan instance EC2 jangan lupa untuk menambahkan aturan masuk dalam grup keamanan dengan MYSQL / Aurura.

Moh
sumber
5

Edit File:

/etc/mysql/percona-server.cnf

Tambahkan kode di bawah ini dalam file.

[mysqld] bind-address = 0.0.0.0

Buat pengguna untuk akses jarak jauh.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Semua server linux berfungsi,

Untuk MSWin c: \ Temukan lokasi penyimpanan \ path file

Tejas Tank
sumber
[mysqld] perlu menambahkan file, kalau tidak, tidak berfungsi dengan baik
Tejas Tank
3

Cukup buat pengguna ke beberapa basis data seperti

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Lalu pergi ke

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfdan ubah baris bind-address = 127.0.0.1kebind-address = 0.0.0.0

Setelah itu Anda dapat terhubung ke database itu dari IP apa pun.

Diogo Mendes
sumber
3

Buka mysql consoledan jalankan perintah berikut (masukkan nama database, nama pengguna, dan kata sandi Anda):

GRANT ALL ON yourdatabasename. * KE admin @ '%' DIIDENTIFIKASI OLEH 'yourRootPassword';

Kemudian Jalankan:

PRIVILEGUS FLUSH;

Buka baris perintah dan buka file /etc/mysql/mysql.conf.d/mysqld.cnfmenggunakan editor apa saja dengan root privileges.

Sebagai contoh:

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

Kemudian komentari baris di bawah ini:

bind-address = 127.0.0.1

Mulai ulang mysql untuk mencerminkan perubahan menggunakan perintah:

sudo service mysql restart

Nikmati ;)

Usman Yousaf
sumber
2

Anda perlu mengubah file konfigurasi mysql:

Mulailah dengan mengedit file konfigurasi mysql

vim /etc/mysql/my.cnf

Menambahkan:

bind-address = 0.0.0.0
bhushan pardhi
sumber
0

Di panel situs web seperti cPanel, Anda dapat menambahkan satu %(tanda persentase) dalam nama host yang diizinkan untuk mengakses database MySQL Anda.

Dengan menambahkan satu %Anda dapat mengakses database Anda dari IP atau situs web apa pun bahkan dari aplikasi desktop.

Muhammad Saqib
sumber
tolong jangan merujuk ke hal seperti cPanel ketika kueri langsung disajikan, ini tidak akan pernah menunjukkan hasil yang bekerja untuk orang lain
Tobias Hagenbeek
@TobiasHagenbeek Terima kasih atas tanggapan Anda. Metode / trik ini tidak ditemukan oleh saya (Ini umum di internet). Tapi saya salah satu penguji dari metode ini dan saya menemukan itu adalah metode yang paling mudah dan bekerja itulah sebabnya saya diposting di sini. Saya tahu ada beberapa risiko keamanan dalam metode ini yang dapat diabaikan.
Muhammad Saqib
0

Misalnya di CentOS saya

sudo gedit /etc/mysql/my.cnf

komentari baris berikut

# bind-address = 127.0.0.1

kemudian

sudo service restart mysqld

zawhtut
sumber
0

Jika Anda ingin memberikan akses jarak jauh dari basis data Anda dari alamat IP apa pun, jalankan perintah mysql dan setelah itu jalankan perintah berikut.

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;
Atul6.Singh
sumber
0

apa yang bekerja untuk Ubuntu adalah memberikan semua hak istimewa kepada pengguna:

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

dan mengatur alamat ikat di /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

kemudian restart daemon mysql:

service mysql restart
Miguel Mota
sumber
-7

Anda dapat menonaktifkan semua keamanan dengan mengedit /etc/my.cnf:

skip-grant-tables
Danyial Shahid Ali
sumber
ini menghapus semua persyaratan kata sandi
kristopolous
5
Perhatikan bahwa tidak disarankan untuk mengaktifkan opsi ini di lingkungan produksi, karena ini memungkinkan siapa saja untuk terhubung tanpa kata sandi!
AStopher
Namun, ini sangat ideal untuk lingkungan pengembang
DMCoding
Ini memungkinkan orang untuk meretas basis data Anda tanpa menggunakan kata sandi.
MilkyWay90
@DanielJames bahkan untuk lingkungan pengembangan adalah ide yang buruk
Dragas