Trên hệ điều hành Linux, nếu bạn cố gắng kết nối vào MySQL/MariaDB bằng tài khoản người dùng thông thường mà không sử dụng quyền sudo, bạn có thể gặp phải lỗi sau.
Như bạn đã thấy, khi không sử dụng quyền sudo để kết nối đến MySQL/MariaDB trên Ubuntu, bạn sẽ gặp lỗi “Access denied for user…”. Tuy nhiên, khi sử dụng quyền sudo, bạn có thể kết nối thành công.
Nguyên nhân của vấn đề này là do trên Ubuntu, MySQL/MariaDB mặc định chỉ cho phép người dùng “root” đăng nhập thông qua “unix_socket,” và điều này đòi hỏi bạn phải có quyền sudo để thực hiện việc đăng nhập.
Để xác định phương thức đăng nhập mà một người dùng sử dụng, bạn có thể sử dụng lệnh SQL sau:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Vậy để login bạn cần tạo user khác để login. Tuy nhiên bạn có thể thay đổi cơ chế login để user root login thông qua password như thông thường.
Sử dụng các lệnh SQL sau để thay đổi từ unix_socket sang login bằng password thông thường.
- Đầu tiên login bằng tài khoản root với quyền sudo
sudo mysql -u root -p
- Sau đó thay đổi lại cơ chế login
MariaDB []>use mysql; MariaDB [mysql]>update user set plugin='' where User='root'; MariaDB [mysql]>flush privileges; MariaDB [mysql]>exit
Bây giờ bạn có thể đăng nhập bình thường mà không phải sử dụng quyền sudo.