Người dùng MySQL DB không có cột mật khẩu - Cài đặt MySQL trên OSX


172

Tôi đang cố gắng thay đổi mật khẩu gốc MySql.

Những gì tôi đã làm là dưới đây.

  1. Cài đặt MySql-5.7.6 ~ .dmg (Máy chủ cộng đồng) và bàn làm việc.
  2. Tắt máy chủ trên tùy chọn Hệ thống OSX.
  3. Truy cập MySql bằng bàn điều khiển. Lệnh làmysqld_safe --skip-grant
  4. Thực thi update user set password=password('1111') where user='root';và nhận được thông báo lỗi -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

FYI, tôi đã làm use mysql;. Vì vậy, tôi đã chọn truy vấn trên bảng người dùng và thấy cột mật khẩu thực sự không tồn tại.

Nó rất kỳ lạ. Có thể là bảng người dùng ban đầu không có cột mật khẩu?

Làm cách nào để thay đổi mật khẩu không tồn tại?

Cảm ơn câu trả lời của bạn: D


Bây giờ tôi kiểm tra lại và tôi có thể truy cập MySQL mà không cần PW :( Thay đổi có tốt không (ý tôi là thay đổi bảng người dùng và thêm cột mật khẩu qua truy vấn) bảng người dùng?
Juneyoung Oh

THIẾT LẬP PASSWORD cho root @ localhost = password ('new-pass') - hoạt động cho mọi phiên bản mysql
SIDU

UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; Bởi vì trường 'Mật khẩu' đã bị xóa bởi mysql và được thay thế bằng xác thực. Lưu ý: rằng hàm mysASS PASSWORD ('password') dựa trên thuật toán MD5 đã bị bẻ khóa từ lâu bằng cách sử dụng cuộc tấn công ngày sinh. Vì vậy, sử dụng nó mang lại cảm giác an toàn sai lầm vì kẻ tấn công chỉ có thể dán băm mà nó tạo ra trong một trang web công cộng như hashkiller.co.uk/md5-decrypter.aspx và lấy lại mật khẩu văn bản đơn giản của bạn.
Bác sĩ Đèo

Câu trả lời:


557

Trong MySQL 5.7, trường mật khẩu trong trường bảng mysql.user đã bị xóa, bây giờ tên trường là 'verify_ chuỗi'.

Đầu tiên chọn cơ sở dữ liệu:

mysql>use mysql;

Và sau đó hiển thị các bảng:

mysql>show tables;

Bạn sẽ tìm thấy bảng người dùng, bây giờ hãy xem các trường của nó:

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

Điều ngạc nhiên Không có trường có tên 'mật khẩu', trường mật khẩu được đặt tên là 'xác thực_ chuỗi'. Vì vậy, chỉ cần làm điều này:

update user set authentication_string=password('1111') where user='root';

Bây giờ, mọi thứ sẽ ổn thôi.

So với MySQL 5.6, những thay đổi khá rộng rãi: Có gì mới trong MySQL 5.7


42
Bạn đã làm cho ngày của tôi.
Bisonfan95

3
Phương pháp này hoạt động ngay cả với hạn chế --skip-Grant-bảng khi bắt đầu mysqld. Vì bạn là người dùng ẩn danh, bạn không thể thay đổi mật khẩu bằng: ALTER USER 'root' @ 'localhost' IDENTifyED BY 'new-password' ALTER USER 'root' @ '*' IDENTifyED BY 'new-password' Nó sẽ cung cấp bạn một lỗi người dùng ẩn danh.
Bisonfan95

Nếu không có bảng nào cả?
Sahand

1
thay đổi tên trường mật khẩu ... một quyết định gây ra rất nhiều rắc rối cho mọi người ...
talsibony

2
Khi đặt lại mật khẩu gốc ở bước 2), cũng thay đổi plugin auth thành mysql_native_password: use mysql; update user set authentication_string=PASSWORD("") where User='root'; update user set plugin="mysql_native_password" where User='root'; # THIS LINE flush privileges; quit;
Viswa

26

Lỗi này xảy ra nếu bạn không đặt mật khẩu khi cài đặt, trong trường hợp này là mysql sử dụng plugin unix-socket .

Nhưng nếu xóa liên kết plugin khỏi cài đặt (bảng mysql.user) sẽ gặp vấn đề khác. Điều này không khắc phục vấn đề và tạo ra một vấn đề khác. Để sửa liên kết đã xóa và đặt mật khẩu ("PWD"), hãy làm:

1) Chạy với --skip-grant-tablesnhư đã nói ở trên.

Nếu nó không hoạt động sau đó thêm các chuỗi skip-grant-tablestrong phần [mysqld]của /etc/mysql/mysql.conf.d/mysqld.cnf. Rồi làm sudo service mysql restart.

2) Chạy mysql -u root -p, sau đó (thay đổi "PWD"):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit

sau đó sudo service mysql restart. Kiểm tra : mysql -u root -p.

Trước khi restartxóa chuỗi đó khỏi tệp mysqld.cnf, nếu bạn đặt nó ở đó.


Tại chỗ trên! Cần plugin = "mysql_native_password" và các đặc quyền tuôn ra. Không thể làm điều này để làm việc với bất kỳ ví dụ khác. Cảm ơn bạn bl79!
TheRealWebGuy

Tôi nhận đượcERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("MYNEWPASSWORD"), plugin="mysql_native_password"
Chance Smith

Câu trả lời của bạn thật tuyệt! đây là một câu trả lời giúp tôi trong suốt 6 giờ chiến đấu
AlexNikonov

plugin = "mysql_native_password" Xong việc cho tôi
Joyner

Hoàn hảo làm việc cho tôi
Mayank Sharma

23

Một cạm bẫy tôi rơi vào là không có trường mật khẩu , nó đã được đổi tên thành:

update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';

Bây giờ nên là:

update user set authentication_string=password('YOURPASSWORDHERE') where user='root';


16

Sử dụng ALTER USERlệnh thay vì cố gắng cập nhật một USERhàng. Hãy nhớ rằng có thể có nhiều hơn một người dùng 'root', bởi vì các thực thể người dùng cũng đủ điều kiện bởi máy mà họ kết nối

https://dev.mysql.com/doc/refman/5.7/vi/alter-user.html

Ví dụ.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 

2
Đối với MySQL 5.7.9, tôi phải THAY ĐỔI NGƯỜI DÙNG để hoạt động đúng. Cảm ơn.
shin

chúng tôi cần cho người dùng \ g theo lệnh trên. Sử dụng MySql 5.7.12. ty
bobsouza

câu trả lời này chỉ có hiệu quả với tôi, trên Ubuntu 16.04, mysql 5.7.19;
A1Gard

Họ đã thay đổi ký tự đại diện từ @ thành *? Grr ... bây giờ tôi có nhiều câu hỏi hơn khi tôi đến đây.
pguardiario

4

Nó chỉ hoạt động với tôi khi tôi "đỏ mặt" sau khi các lệnh được đề cập ở đây. Dưới đây là danh sách đầy đủ các lệnh tôi đã sử dụng:

Các câu trả lời trước có thể không hoạt động cho các phiên bản mysql sau này. Hãy thử các bước sau nếu câu trả lời trước không hiệu quả với bạn:

1- Nhấp vào biểu tượng wamp> mysql> bảng điều khiển mysql

2- viết các lệnh sau, từng cái một

use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit

4

Cảm ơn sự giúp đỡ của bạn. Chỉ trong trường hợp nếu mọi người vẫn gặp vấn đề, hãy thử điều này.

Dành cho MySQL phiên bản 5.6 trở xuống

Bạn đã quên mật khẩu 'ROOT' của Mac OS X và cần đặt lại? Thực hiện theo 4 bước đơn giản sau:

  1.  Dừng máy chủ mysqld. Thông thường, điều này có thể được thực hiện bởi 'Prefrences'> MySQL> 'Stop MySQL Server'
  2.  Khởi động máy chủ ở chế độ an toàn với bỏ qua đặc quyền Từ thiết bị đầu cuối:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  Trong cửa sổ terminal mới:      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Dừng máy chủ mysqld một lần nữa và khởi động lại nó ở chế độ bình thường.

Dành cho phiên bản MySQL 5.7 trở lên

  1.  Dừng máy chủ mysqld. Thông thường, điều này có thể được thực hiện bởi 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Khởi động máy chủ ở chế độ an toàn với bỏ qua đặc quyền Từ thiết bị đầu cuối:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  Trong cửa sổ terminal mới:            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  Dừng máy chủ mysqld một lần nữa và khởi động lại nó ở chế độ bình thường.

Điều này giúp tôi trong khi cài đặt mysql <5.7
Ankit Agarwal

3

Đối với vấn đề này, tôi đã sử dụng một phương pháp đơn giản và thô lỗ, đổi tên trường thành mật khẩu, lý do là tôi sử dụng phần mềm cao cấp mac navicat trong lỗi thao tác trực quan: cột 'mật khẩu' không xác định trong 'Danh sách trường', bản thân phần mềm sử dụng mật khẩu để tôi không thể dễ dàng vận hành. Do đó, tôi root vào dòng lệnh cơ sở dữ liệu, chạy

Use mysql;

Và sau đó sửa đổi tên trường:

ALTER TABLE user CHANGE authentication_string password text;

Sau tất cả bình thường.


0

Nguyên nhân gốc: root không có mật khẩu và câu lệnh kết nối python của bạn sẽ phản ánh điều đó.

Để giải quyết lỗi 1698, hãy thay đổi mật khẩu kết nối python của bạn thành ''.

lưu ý: cập nhật thủ công mật khẩu của người dùng sẽ không giải quyết được vấn đề, bạn vẫn sẽ gặp lỗi 1698


0

hãy nhớ mật khẩu cần được đặt thêm ngay cả sau khi khởi động lại mysql như dưới đây

SET PASSWORD = PASSWORD('root');
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.