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