Login mysql tanpa prompt kata sandi

Bagi kita semua yang belajar menggunakan atau mengembangkan dengan MySQL atau MariaDB, merupakan tugas umum untuk masuk ke database secara manual untuk diperiksa. Hal ini biasanya dilakukan dengan klien baris perintah mysql, dan tentunya sulit untuk masuk ke database menggunakan kredensial aplikasi Anda. Untuk tujuan kenyamanan, Anda ingin membuat hidup Anda mudah dengan mengonfigurasi mysql CLI untuk TIDAK meminta kata sandi setiap kali. Berikut adalah tiga cara untuk melakukannya di Linux

(Ini mungkin bekerja pada BSD dan macOS juga, tapi saya belum mengujinya. )

Metode 1. Gunakan [client] user=ibug password=some_password _1

Secara default, pengguna root lokal dapat masuk ke MySQL atau MariaDB tanpa kata sandi, jadi Anda cukup menggunakan

[client]
user=ibug
password=some_password
2 alih-alih mysql, dan berharap semuanya berfungsi. Tentu saja, ini tergantung pada
[client]
user=ibug
password=some_password
_1 Anda untuk tidak meminta kata sandi, atau Anda masih harus memasukkannya untuk hak akses root

Anda dapat melangkah lebih jauh dengan menambahkan

[client]
user=ibug
password=some_password
5 ke
[client]
user=ibug
password=some_password
6 Anda atau shell apa pun yang Anda gunakan, tetapi ini masih sedikit meretas, dan IMO lebih merupakan solusi daripada solusi, jadi baca terus sebelum melanjutkan

Metode 2. Gunakan kata sandi dan ingat di suatu tempat

Opsi kedua adalah menggunakan kata sandi, dan membiarkannya "disediakan secara otomatis" dengan cara lain

Pertama, buat pengguna database untuk Anda sendiri. Jangan lupa ganti

[client]
user=ibug
password=some_password
_7 dengan nama pengguna Anda

CREATE USER 'ibug'@'localhost' IDENTIFIED BY 'some_password';
GRANT ALL PRIVILEGES ON *.* TO 'ibug'@'localhost';
FLUSH PRIVILEGES;
_

Sekarang Anda dapat masuk ke MySQL atau MariaDB menggunakan

[client]
user=ibug
password=some_password
8

Anda mungkin didesak untuk menambahkan itu sebagai alias di

[client]
user=ibug
password=some_password
6 Anda, tapi tunggu lagi, itu cara yang salah untuk melakukannya. Jika
[client]
user=ibug
password=some_password
_6 Anda dapat dibaca oleh orang lain, Anda berisiko membuka kata sandi Anda. Selain itu, jika Anda ingin masuk sebagai pengguna lain beberapa waktu kemudian, Anda dapat mengacaukan semuanya karena perluasan alias

Cara yang benar untuk menyimpan kata sandi untuk Anda sendiri adalah dengan menuliskannya di file bernama

CREATE USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
1 di bawah direktori home Anda. Kontennya akan terlihat seperti ini

[client]
user=ibug
password=some_password

Ingatlah untuk

CREATE USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
_2 agar tidak ada orang lain yang membacanya. Anda sekarang dapat mencoba menjalankan mysql_ secara langsung, dan itu akan membaca nama pengguna dan kata sandi Anda dari
CREATE USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
1 tanpa meminta apa pun dari Anda

Tetapi sekali lagi, jika Anda menggunakan kata sandi yang lemah dan seseorang berhasil menebaknya, Anda masih berisiko mengekspos seluruh database MySQL Anda kepada mereka.

Pikirkan bagaimana pengguna root di sistem Anda masuk ke MySQL secara langsung - aman dan terlindungi, karena Anda tidak dapat masuk tanpa kata sandi menggunakan pengguna root (kecuali jika Anda menjalankan mysql sebagai root, tetapi tidak

CREATE USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
6 sebagai pengguna biasa). Kabar baiknya adalah, Anda dapat mereplikasi penyiapan ini untuk diri Anda sendiri. Jadi baca terus untuk solusi terakhir dan sempurna

Metode 3. Gunakan otentikasi Unix

Sedikit latar belakang dulu. Seperti bagaimana seseorang bisa mendapatkan alamat dan port dari ujung lain dari soket TCP atau UDP, seseorang juga bisa mendapatkan informasi konektor dari ujung lain dari soket unix, yaitu ID proses, ID pengguna dan ID grup (lihat

CREATE USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
7,

Ketika Anda menjalankan mysql pada mesin lokal Anda, itu akan mencoba untuk terhubung ke server MySQL menggunakan soket unix yang terletak di

ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
0, dan dengan cara ini server MySQL akan tahu siapa yang mencoba untuk terhubung. Ini persis bagaimana MySQL mengidentifikasi pengguna root lokal. Pengguna root tidak akan memiliki akses yang sama jika mencoba terhubung melalui TCP (mis. e.
ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
_1)

Agar MySQL mengenali Anda menggunakan sihir soket unix, Anda dapat menggunakan kueri berikut untuk membuat pengguna Anda

CREATE USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;

Jika Anda telah membuat pengguna, Anda dapat mengubah metode autentikasinya hanya dengan mengganti

ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
2 dengan
ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
3 dalam kueri di atas

ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;

MariaDB membuat perbedaan di sini

MariaDB, garpu komunitas Oracle MySQL, menggunakan kueri serupa untuk otentikasi soket unix

CREATE USER 'ibug'@'localhost' IDENTIFIED VIA unix_socket;
--                                        ^^^^^^^^^^^^^^^

Lebih baik lagi, MariaDB mendukung pembuatan pengguna dengan kueri

ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
4, sehingga dua kueri pertama dapat digabungkan menjadi satu

GRANT ALL PRIVILEGES ON *.* TO 'ibug'@'localhost' IDENTIFIED VIA unix_socket;

Setelah pengguna disiapkan dengan benar, gunakan kueri

ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
4 yang sama untuk memberikan akses kepada Anda sendiri

Sekarang Anda dapat menggunakan mysql_ untuk mengelola seluruh database Anda tanpa diminta kata sandi. Anda dapat menghapus

CREATE USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
_1 dengan aman jika Anda membuatnya mengikuti Metode 2 dan Anda tidak memiliki opsi lain di dalamnya. Anda juga dapat mencoba menggunakan
ALTER USER 'ibug'@'localhost' IDENTIFIED WITH auth_socket;
_8 di bawah pengguna lain dan melihatnya gagal, untuk memastikan bahwa hanya Anda yang dapat mengakses database secara langsung

Membuat dan memberikan akses ke lebih banyak pengguna

Jika Anda ingin membuat lebih banyak pengguna dengan baris perintah mysql Anda, Anda mungkin akan melihat pesan ini

ERROR 1045 (28000): Access denied for user 'ibug'@'localhost' (using password: YES)

Ini karena Anda belum memberi diri Anda hak istimewa untuk diberikan, atau dengan kata lain, hak istimewa Anda tidak "dapat didistribusikan kembali"

Anda dapat menyetel hak istimewa lagi, tetapi dengan hak istimewa untuk "mendistribusikan kembali" akses Anda ke lebih banyak pengguna, dengan kueri berikut

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

Demikian pula, one-liner untuk MariaDB terlihat seperti ini

GRANT ALL PRIVILEGES ON *.* TO 'ibug'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION;
FLUSH PRIVILEGES;

Baik MySQL dan MariaDB membutuhkan "pembilasan" setelah penetapan hak istimewa apa pun diubah

Anda kemudian dapat membuat lebih banyak pengguna dengan akses tanpa kata sandi Anda, dan bermain-main dengan MySQL untuk memenuhi rasa ingin tahu Anda

Bagaimana cara saya masuk ke MySQL tanpa kata sandi?

Ini kasusnya jika Anda menginisialisasi direktori data menggunakan mysqld --initialize-insecure. .
Terhubung ke server sebagai root tanpa kata sandi. $> mysql -u root --lewati-kata sandi
Tetapkan kata sandi. mysql> ALTER USER 'root'@'localhost' DIIDENTIFIKASI OLEH 'root-password';

Bagaimana cara menggunakan perintah MySQL tanpa prompt kata sandi?

Cara Menggunakan Perintah MySQL tanpa Prompt Kata Sandi .
Membuat. -ku. cnf di direktori home pengguna dari mana perintah atau skrip dijalankan. vi ~/. -ku. cnf. .
Sekarang amankan file konfigurasi yang baru dibuat. chmod 600 ~/. -ku. cnf
Semua selesai. Mari kita uji penyiapan. Saya telah menggunakan perintah berikut untuk memverifikasi konfigurasi di atas

Mengapa MySQL tidak meminta kata sandi?

Alasannya adalah MySQL menggunakan opsi autentikasi soket secara default untuk pengguna root . Jika Anda ingin menonaktifkannya, Anda perlu mengubah plugin Otentikasi untuk akun root dari "Otentikasi soket" menjadi "Otentikasi MySQL Asli". Simpan jawaban ini.