Akses ditolak untuk 'root' @ 'localhost' pengguna (menggunakan kata sandi: YES) setelah instalasi baru di Ubuntu

124

Hari ini saya melakukan login sebagai root ke Ubuntu 14.04.1 LTS ll

dan kemudian apt-get install mariadb-server(tanpa sudo tetapi sebagai root).

Dengan mySQL -h localhost -u root --password=<PW>saya punya

Akses ditolak untuk 'root' @ 'localhost' pengguna (menggunakan kata sandi: YA)

Dengan mySQL -u root -psaya masuk ke DB dan melakukannya

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

Tapi ini tidak membantu. Apakah kamu punya ide Saya tidak menemukan jawaban untuk pertanyaan serupa.

SQL-Neuling
sumber
Sudahkah Anda mencoba mengatur ulang kata sandi untuk root?
Ozgur Bar

Jawaban:

278

TL; DR: Untuk mengakses versi mysql / mariadb yang lebih baru setelah sebagai pengguna root, setelah instalasi baru, Anda harus berada di shell root (yaitu sudo mysql -u root, atau mysql -u rootdi dalam shell yang dimulai oleh su -atau yang sudo -ipertama)


Baru saja melakukan peningkatan yang sama, di Ubuntu, saya mengalami masalah yang sama.

Yang aneh adalah itu

sudo /usr/bin/mysql_secure_installation

Akan menerima kata sandi saya, dan mengizinkan saya untuk mengaturnya, tetapi saya tidak bisa masuk rootmelalui mysqlklien

Saya harus memulai mariadb dengan

sudo mysqld_safe --skip-grant-tables

untuk mendapatkan akses sebagai root, sementara semua pengguna lain masih dapat mengakses dengan baik.

Melihat mysql.usertabel yang saya perhatikan untuk root, pluginkolom disetel ke unix_socketsedangkan semua pengguna lain disetel ke 'mysql_native_password'. Sekilas melihat halaman ini: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ menjelaskan bahwa Unix Socket memungkinkan masuk dengan mencocokkan uidproses yang menjalankan klien dengan pengguna di mysql.usermeja. Dengan kata lain untuk mengakses mariadb karena rootAnda harus masuk sebagai root.

Benar-benar me-restart daemon mariadb saya dengan otentikasi diperlukan saya dapat login sebagai root dengan

sudo mysql -u root -p

atau

sudo su -
mysql -u root -p

Setelah melakukan ini, saya berpikir tentang cara mengakses tanpa harus melakukan sudo, yang hanya masalah menjalankan kueri mysql ini

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(mengganti <password>dengan kata sandi root mysql yang Anda inginkan). Ini password login yang diaktifkan untuk pengguna root.

Alternatifnya menjalankan kueri mysql:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

Akan mengubah akun root untuk menggunakan login kata sandi tanpa mengubah kata sandi, tetapi ini mungkin meninggalkan Anda dengan instalasi mysql / mariadb tanpa kata sandi root di atasnya.

Setelah salah satu dari ini, Anda perlu memulai ulang mysql / mariadb:

sudo service mysql restart

Dan voila saya memiliki akses dari akun pribadi saya melalui mysql -u root -p

PERHATIKAN BAHWA MELAKUKAN INI MENGURANGI KEAMANAN Mungkin pengembang MariaDB telah memilih agar akses root berfungsi seperti ini karena alasan yang bagus.

Memikirkannya, saya cukup senang untuk melakukannya, sudo mysql -u root -pjadi saya beralih kembali ke itu, tetapi saya pikir saya akan memposting solusi saya karena saya tidak dapat menemukannya di tempat lain.

DorianFM
sumber
7
"untuk mengakses mariadb sebagai root, Anda harus login sebagai root." - Kalimat ini harus ada di jawaban teratas.
Philipp Ludwig
1
mengapa Anda menjalankan GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; perintah dua kali sebelum membersihkan privasi?
Blairg23
4
Ini harusnya ada di tempat yang lebih terlihat, seperti huruf merah besar selama instalasi atau sesuatu ... Hanya menyia-nyiakan beberapa jam hidup mencoba mengatur server yang saya butuhkan ASAP ....
Gall Annonim
1
btw, jika Anda malas seperti saya, Anda dapat menghemat seperti dua detik dengansudo service mysql restart
zeisi
1
Terima kasih atas tipnya, bagus untuk dev, tetapi bagaimana Anda mengembalikannya ke aslinya?
Sam
42

Di Ubuntu 16.04 LTS yang bersih, login root MariaDB untuk localhost diubah dari gaya kata sandi menjadi gaya login sudo ...

jadi, lakukan saja

sudo mysql -u root

karena kita ingin masuk dengan kata sandi, buat 'pengguna' pengguna lain

di konsol MariaDB ... (Anda masuk ke konsol MariaDB dengan 'sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

lalu di prompt bash shell,

mysql-workbench

dan Anda bisa login dengan 'user' dengan 'yourpassword' di localhost

Curycu
sumber
12

Coba perintahnya

sudo mysql_secure_installation

tekan enter dan tetapkan kata sandi baru untuk root di mysql / mariadb .

Jika Anda mendapatkan error seperti

ERROR 2002 (HY000): Tidak dapat terhubung ke server MySQL lokal melalui soket '/var/run/mysqld/mysqld.sock'

aktifkan layanan dengan

service mysql start

sekarang jika Anda masuk kembali dengan

mysql -u root -p

jika Anda mengikuti masalah, masuk dengan sudo sudan mysql -u root -psekarang terapkan izin ke root

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

ini memperbaiki masalah saya di MariaDB .

Semoga berhasil

IsraelM17
sumber
11

dari superuser menerima jawaban :

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
sailfish009
sumber
3

Saya harus masuk ke Ubuntu sebagai root untuk mengakses Mariadb sebagai root. Mungkin ada hubungannya dengan "Harden ..." yang meminta Anda lakukan saat pertama kali menginstal. Begitu:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

dan Anda masuk.

Joe C
sumber
2

Perintah baru untuk membersihkan hak istimewa adalah:

FLUSH PRIVILEGES

Perintah lama FLUSH ALL PRIVILEGEStidak berfungsi lagi.

Anda akan mendapatkan error yang terlihat seperti itu:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

Semoga ini membantu :)

Sylvain
sumber
0

Sistem seperti Ubuntu lebih suka menggunakan plugin auth_socket . Ini akan mencoba untuk mengotentikasi dengan membandingkan nama pengguna Anda di DB dan proses yang membuat permintaan mysql; itu dijelaskan di sini

Plugin soket memeriksa apakah nama pengguna soket (nama pengguna sistem operasi) cocok dengan nama pengguna MySQL yang ditentukan oleh program klien ke server, dan mengizinkan koneksi hanya jika namanya cocok.

Sebagai gantinya Anda mungkin ingin kembali dengan mysql_native_password , yang akan membutuhkan pengguna / kata sandi untuk mengotentikasi.

Tentang metode untuk mencapai itu, saya merekomendasikan ini sebagai gantinya.

nguyen
sumber