Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu: CÓ) sau khi cài đặt mới trên Ubuntu


124

Hôm nay tôi đã đăng nhập bằng quyền root vào Ubuntu 14.04.1 LTS ll

và sau đó apt-get install mariadb-server(không có sudo nhưng là gốc).

Với mySQL -h localhost -u root --password=<PW>tôi có

Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu: CÓ)

Với việc mySQL -u root -ptôi đã đăng nhập vào DB và đã

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

Nhưng điều này không giúp được gì. Bạn có ý tưởng gì không? Tôi không tìm thấy câu trả lời cho những câu hỏi tương tự.


Bạn đã thử gửi lại mật khẩu cho root chưa?
Ozgur Bar

Câu trả lời:


277

TL; DR: Để truy cập các phiên bản mới hơn của mysql / mariadb sau khi là người dùng root, sau khi cài đặt mới, bạn cần ở trong root shell (tức là sudo mysql -u roothoặc mysql -u rootbên trong shell được bắt đầu bởi su -hoặc sudo -itrước)


Tôi vừa thực hiện nâng cấp tương tự, trên Ubuntu, tôi đã gặp vấn đề tương tự.

Điều kỳ lạ là

sudo /usr/bin/mysql_secure_installation

Sẽ chấp nhận mật khẩu của tôi, và cho phép tôi để thiết lập nó, nhưng tôi không thể đăng nhập như rootthông qua các mysqlkhách hàng

Tôi phải bắt đầu mariadb với

sudo mysqld_safe --skip-grant-tables

để có được quyền truy cập với tư cách là người chủ, trong khi tất cả những người dùng khác vẫn có thể truy cập tốt.

Nhìn vào mysql.userbảng, tôi nhận thấy plugincột được đặt thành ' unix_sockettrong khi tất cả người dùng khác, nó được đặt thành' mysql_native_password '. Xem nhanh trang này: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ giải thích rằng Unix Socket cho phép đăng nhập bằng cách khớp uidquy trình đang chạy ứng dụng khách với quy trình của người dùng trong mysql.userbàn. Nói cách khác, để truy cập mariadb, rootbạn phải đăng nhập với quyền root.

Chắc chắn đủ khởi động lại daemon mariadb của tôi với yêu cầu xác thực, tôi có thể đăng nhập với quyền root bằng

sudo mysql -u root -p

hoặc là

sudo su -
mysql -u root -p

Sau khi thực hiện điều này, tôi đã nghĩ về cách truy cập mà không cần phải thực hiện sudo, vấn đề chỉ là chạy các truy vấn mysql này

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

(thay thế <password>bằng mật khẩu gốc mysql mong muốn của bạn). Điều này đã kích hoạt đăng nhập mật khẩu cho người dùng root.

Ngoài ra, chạy truy vấn mysql:

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

Sẽ thay đổi tài khoản gốc để sử dụng đăng nhập bằng mật khẩu mà không cần thay đổi mật khẩu, nhưng điều này có thể khiến bạn cài đặt mysql / mariadb mà không có mật khẩu gốc trên đó.

Sau một trong hai cách này, bạn cần khởi động lại mysql / mariadb:

sudo service mysql restart

Và tôi đã có quyền truy cập từ tài khoản cá nhân của mình qua mysql -u root -p

XIN LƯU Ý RẰNG LÀM VIỆC NÀY GIẢM BẢO MẬT Có lẽ các nhà phát triển MariaDB đã chọn để quyền truy cập root hoạt động như thế này vì một lý do chính đáng.

Nghĩ về điều đó, tôi khá vui khi phải làm sudo mysql -u root -pvậy nên tôi đang quay lại với điều đó, nhưng tôi nghĩ rằng tôi sẽ đăng giải pháp của mình vì tôi không thể tìm thấy giải pháp ở nơi khác.


7
"để truy cập mariadb bằng quyền root, bạn phải đăng nhập bằng root." - Câu này nên đứng đầu câu trả lời.
Philipp Ludwig

1
tại sao bạn chạy GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; lệnh hai lần trước khi xả privvies?
Blairg23

4
Đây có thể trong ngưỡng hơn có thể nhìn thấy, giống như chữ đỏ lớn trong instalation hoặc một cái gì đó ... Chỉ cần lãng phí vài giờ của cuộc sống cố gắng để thiết lập máy chủ mà tôi cần càng sớm càng tốt ....
Gall Annonim

1
btw, nếu bạn lười biếng như tôi, bạn có thể tiết kiệm như hai giây vớisudo service mysql restart
zeisi

1
Cảm ơn vì mẹo, tuyệt vời cho nhà phát triển nhưng làm thế nào để bạn đảo ngược điều này trở lại ban đầu?
Sam

42

Trong Ubuntu 16.04 LTS sạch, đăng nhập gốc MariaDB cho localhost đã thay đổi từ kiểu mật khẩu thành kiểu đăng nhập sudo ...

vì vậy, chỉ cần làm

sudo mysql -u root

vì chúng tôi muốn đăng nhập bằng mật khẩu, hãy tạo một 'người dùng' khác

trong bảng điều khiển MariaDB ... (bạn nhận được trong bảng điều khiển MariaDB với 'sudo mysql -u root')

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

sau đó trong lời nhắc bash shell,

mysql-workbench

và bạn có thể đăng nhập với 'người dùng' bằng 'mật khẩu của bạn' trên localhost


12

Thử lệnh

sudo mysql_secure_installation

nhấn enter và gán mật khẩu mới cho root trong mysql / mariadb .

Nếu bạn gặp lỗi như

LỖI 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/run/mysqld/mysqld.sock'

kích hoạt dịch vụ với

service mysql start

bây giờ nếu bạn nhập lại với

mysql -u root -p

nếu bạn gặp sự cố, hãy nhập với sudo sumysql -u root -pbây giờ áp dụng quyền cho root

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

điều này đã khắc phục sự cố của tôi trong MariaDB .

Chúc may mắn



3

Tôi phải đăng nhập vào Ubuntu bằng quyền root để truy cập Mariadb bằng quyền root. Nó có thể liên quan đến "Harden ..." mà nó nhắc bạn làm khi bạn cài đặt lần đầu. Vì thế:

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

và bạn tham gia.


2

Lệnh mới để xóa các đặc quyền là:

FLUSH PRIVILEGES

Lệnh cũ FLUSH ALL PRIVILEGESkhông hoạt động nữa.

Bạn sẽ gặp lỗi giống như sau:

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

Hi vọng điêu nay co ich :)



0

Hệ thống như Ubuntu thích sử dụng plugin auth_socket hơn . Nó sẽ cố gắng xác thực bằng cách so sánh tên người dùng của bạn trong DB và xử lý yêu cầu mysql; nó được mô tả ở đây

Plugin socket kiểm tra xem tên người dùng socket (tên người dùng hệ điều hành) có khớp với tên người dùng MySQL do chương trình khách chỉ định với máy chủ hay không và chỉ cho phép kết nối nếu tên khớp.

Thay vào đó, bạn có thể muốn quay lại với mysql_native_password , mật khẩu này sẽ yêu cầu người dùng / mật khẩu để xác thực.

Về phương pháp để đạt được điều đó, tôi khuyên bạn nên thay thế này .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.