Uji kredensial MySQL dari baris perintah Linux?

16

Bagaimana Anda menguji kredensial MySQL dari baris perintah di server Linux?

Jake Wilson
sumber

Jawaban:

5

@ Phil's Answer dan @ Mr.Brownstone's Answer sudah cukup untuk pertanyaan Anda, jadi +1 untuk keduanya.

Untuk yang berikut, mari kita asumsikan Anda masuk dengan nama pengguna myuser

Setelah tersambung ke mysql, Anda harus menjalankan kueri berikut:

SELECT USER(),CURRENT_USER();
  • USER () melaporkan bagaimana Anda mencoba mengotentikasi di MySQL
  • CURRENT_USER () melaporkan bagaimana Anda diizinkan untuk mengautentikasi di MySQL

Terkadang mereka berbeda. Ini mungkin memberi Anda wawasan mengapa Anda diizinkan masuk ke mysql.

Berikut ini permintaan lain yang perlu Anda jalankan:

SELECT CONCAT('''',user,'''@''',host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';

Ini akan menunjukkan kepada Anda cara-cara Anda diizinkan masuk myuser.

Jika Anda melihat 'myuser'@'localhost', maka Anda dapat mengautentikasi dari dalam DB Server.

Jika Anda melihat 'myuser'@'127.0.0.1'dan tidak melihat 'myuser'@'localhost', maka Anda dapat mengautentikasi dari dalam DB Server lagi tetapi Anda harus menentukan dari --protocol=tcpdari baris perintah.

Jika Anda melihat 'myuser'@'%', maka Anda dapat melakukan login jarak jauh dari server mana pun.

Jika Anda melihat 'myuse'r@'10.20.30,%', maka Anda dapat melakukan login jarak jauh hanya dari 10.20.30.% Netblock.

Setelah Anda melihat apa yang dimiliki 'mysql.user' untuk pengguna Anda, Anda mungkin ingin mengizinkan atau membatasi pengguna saya dari logggin dalam satu cara dan bukan yang lain.

Jika Anda hanya ingin memeriksa apakah kata sandinya myuseradalah whateverpassword, Anda dapat melakukan hal berikut:

SELECT COUNT(1) Password_is_OK FROM mysql.user
WHERE user='myuser'
AND password=PASSWORD('whateverpassword');

Anda dapat memeriksa dari baris perintah sebagai berikut:

PASSWORDISOK=`mysql -uroot -p... -ANe"SELECT COUNT(1) Password_is_OK FROM mysql.user WHERE user='myuser' AND password=PASSWORD('whateverpassword')"`

Jika tidak rootdan hanya ingin menguji pengguna saya, Anda dapat melakukan ini:

PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`

Jika Anda mendapatkan 1, kata sandi untuk pengguna saya diverifikasi sebagai baik.

RolandoMySQLDBA
sumber
13
mysql -h host -u user -p<whatever> -e"quit"

Ini memungkinkan Anda untuk menggunakan string koneksi yang sama yang Anda gunakan untuk mengirimkan permintaan ke server secara terprogram. Anda dapat menambahkan || exit 1sampai akhir untuk keluar otomatis pada argumen yang tidak valid. Anda mungkin juga ingin mengarahkan ulang stderr ke /dev/nulljika Anda tidak menyukai pesan kesalahan MySQL yang dibuat secara otomatis.

CSTobey
sumber
6

Anda dapat menggunakan perintah berikut (dengan asumsi bahwa Anda telah mengatur mysql di PATH Anda):

mysql -h host -u pengguna -p

Cukup ganti host dan pengguna dengan nilai yang benar dan kemudian Anda akan diminta kata sandi.

Mr.Brownstone
sumber
2
Saya ingin memeriksa secara terprogram. Seperti sesuatu yang mengembalikan benar atau salah.
Jake Wilson
2
mysql --user=user_name --password=your_password dbname

Apakah pertanyaan Anda sesederhana itu, atau adakah kasus khusus yang perlu Anda uji?

Philᵀᴹ
sumber