Làm cách nào để lấy lại tên người dùng và mật khẩu MySQL của tôi?


158

Tôi bị mất tên người dùng và mật khẩu MySQL của tôi. Làm thế nào để tôi lấy nó?

Câu trả lời:


186

Dừng quá trình MySQL.

Bắt đầu quy trình MySQL với tùy chọn --skip-Grant-bảng.

Bắt đầu máy khách bảng điều khiển MySQL với tùy chọn gốc -u.

Liệt kê tất cả người dùng;

SELECT * FROM mysql.user;

Đặt lại mật khẩu;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Nhưng KHÔNG QUÊN để

Dừng quá trình MySQL

Bắt đầu quá trình MySQL bình thường (nghĩa là không có tùy chọn --skip-Grant-bảng)

khi bạn đã kết thúc. Nếu không, bảo mật cơ sở dữ liệu của bạn có thể bị xâm phạm.


7
Hãy nghĩ rằng bạn không cần phải khởi động lại daemon để đặt lại người dùng bình thường. chỉ "RIÊNG TƯ;" sau khi cập nhật mật khẩu người dùng. --skip-Grant-bảng chỉ cần thiết cho việc đặt lại mật khẩu người dùng root! Điều này thường không được khuyến nghị cho thiết lập lại người dùng tiêu chuẩn.
Amos Folarin

Tầm quan trọng của việc sử dụng dpkg-reconfigure mysql-server-5.5lệnh để thiết lập lại mật khẩu MySQL gốc là gì?
phillipsK

@Xenph, Tại sao bạn nói " Khởi động máy khách bảng điều khiển MySQL với tùy chọn gốc -u "? Không có điểm nào để làm điều đó cả khi -ubị bỏ qua khi máy chủ được khởi động --skip-grant-tables.
Pacerier

15
Trong MySQL 5.7. *, Không có cột nào mysql.userđược gọi password, authentication_stringthay vào đó hãy sử dụng .
Adib Aroui


42

Thật không may, mật khẩu người dùng của bạn là không thể khắc phục. Nó đã được băm với hàm băm một chiều mà nếu bạn không biết là không thể đảo ngược. Tôi khuyên bạn nên đi với Xenph Yan ở trên và chỉ cần tạo một cái mới.

Bạn cũng có thể sử dụng quy trình sau từ hướng dẫn để đặt lại mật khẩu cho bất kỳ tài khoản root MySQL nào trên Windows:

  1. Đăng nhập vào hệ thống của bạn với tư cách Quản trị viên.
  2. Dừng máy chủ MySQL nếu nó đang chạy. Đối với máy chủ đang chạy như một dịch vụ Windows, hãy chuyển đến Trình quản lý dịch vụ:

Menu Bắt đầu -> Bảng điều khiển -> Công cụ quản trị -> Dịch vụ

Sau đó tìm dịch vụ MySQL trong danh sách và dừng nó. Nếu máy chủ của bạn không chạy như một dịch vụ, bạn có thể cần phải sử dụng Trình quản lý tác vụ để buộc nó dừng lại.

  1. Tạo một tệp văn bản và đặt các tuyên bố sau trong đó. Thay thế mật khẩu bằng mật khẩu mà bạn muốn sử dụng.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    Mỗi câu lệnh CẬP NHẬTFLUSH phải được viết trên một dòng. Câu lệnh UPDATE đặt lại mật khẩu cho tất cả các tài khoản root hiện có và câu lệnh FLUSH báo cho máy chủ tải lại các bảng cấp vào bộ nhớ.

  2. Lưu các tập tin. Trong ví dụ này, tệp sẽ được đặt tên là C: \ mysql-init.txt.
  3. Mở một cửa sổ giao diện điều khiển để đến dấu nhắc lệnh:

    Menu Bắt đầu -> Chạy -> cmd

  4. Khởi động máy chủ MySQL với tùy chọn --init-file đặc biệt :

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    Nếu bạn đã cài đặt MySQL đến một vị trí không phải là C: \ mysql , hãy điều chỉnh lệnh cho phù hợp.

    Máy chủ thực thi nội dung của tệp được đặt tên bởi tùy chọn --init-file khi khởi động, thay đổi từng mật khẩu tài khoản gốc .

    Bạn cũng có thể thêm tùy chọn --console vào lệnh nếu bạn muốn đầu ra của máy chủ xuất hiện trong cửa sổ giao diện điều khiển thay vì trong tệp nhật ký.

    Nếu bạn đã cài đặt MySQL bằng Trình hướng dẫn cài đặt MySQL, bạn có thể cần chỉ định tùy chọn --defaults-file :

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    Có thể tìm thấy cài đặt --defaults-file thích hợp bằng Trình quản lý dịch vụ:

    Menu Bắt đầu -> Bảng điều khiển -> Công cụ quản trị -> Dịch vụ

    Tìm dịch vụ MySQL trong danh sách, nhấp chuột phải vào nó và chọn tùy chọn Thuộc tính. Trường Đường dẫn đến thực thi chứa cài đặt --defaults-file .

  5. Sau khi máy chủ đã khởi động thành công, hãy xóa C: \ mysql-init.txt .
  6. Dừng máy chủ MySQL, sau đó khởi động lại ở chế độ bình thường. Nếu bạn chạy máy chủ dưới dạng dịch vụ, hãy khởi động nó từ cửa sổ Windows Services. Nếu bạn khởi động máy chủ theo cách thủ công, hãy sử dụng bất kỳ lệnh nào bạn thường sử dụng.

Bây giờ bạn có thể kết nối với MySQL bằng root bằng mật khẩu mới.


5
@Jake - cảm ơn câu trả lời. Tôi muốn cho nó một ngón tay cái lên nhưng vì một số lý do stackoverflow sẽ không cho phép tôi làm như vậy vì điểm danh tiếng. lời giải thích của bạn "không may mật khẩu người dùng của bạn là vĩnh viễn. nó đã được băm bằng một cách băm mà nếu bạn không biết là không thể đảo ngược" chính là chìa khóa để hiểu biết của tôi lý do tại sao tất cả mọi thứ khác mà tôi đọc trên Google CHỈ đã cho tôi hướng dẫn để thay đổi của tôi mật khẩu. giải thích tốt là sâu sắc hơn so với hướng dẫn một mình.
dsdsdsdsd

1
@jake tôi không thể tìm thấy mysql trong danh sách dịch vụ Vui lòng cho tôi biết phải làm gì?

1
Tại sao là của bạn mysqld-ntthay vì mysqld?
Pacerier

Btw, có một tùy chọn không tập tin --init-file? (Một cái gì đó tương tự như lệnh của mysql.exe --execute.)
Pacerier

34

Một cải tiến cho câu trả lời hữu ích nhất ở đây:

1] Không cần khởi động lại máy chủ mysql
2] Mối quan tâm bảo mật đối với máy chủ MySQL được kết nối với mạng

Không cần phải khởi động lại máy chủ MySQL.

sử dụng FLUSH PRIVILEGES;sau khi cập nhật câu lệnh mysql.user để thay đổi mật khẩu.

Câu lệnh FLUSH yêu cầu máy chủ tải lại các bảng cấp vào bộ nhớ để thông báo thay đổi mật khẩu.

Cho --skip-grant-optionsphép mọi người kết nối mà không cần mật khẩu và với tất cả các đặc quyền. Bởi vì điều này không an toàn, bạn có thể muốn

sử dụng --skip-Grant-bảng kết hợp với --skip-mạng để ngăn các máy khách từ xa kết nối.

từ: tham chiếu: đặt lại-allow-generic


@ThinkingMonkey, không phải điều này cho rằng người dùng đã đăng nhập hiện tại có đặc quyền để sửa đổi mysql.user? Thông thường, đó không phải là trường hợp.
Pacerier

6

Mặc dù bạn không thể khôi phục trực tiếp mật khẩu MySQL mà không cần bruteforcing, nhưng có thể có một cách khác - nếu bạn đã sử dụng MySQL Workbench để kết nối với cơ sở dữ liệu và đã lưu thông tin đăng nhập vào "vault", bạn thật tuyệt vời.

Trên Windows, thông tin đăng nhập được lưu trữ trong % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - được mã hóa bằng CryptProtectData (không có bất kỳ entropy bổ sung nào). Giải mã rất dễ dàng:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

Hoặc bạn có thể kiểm tra luồng DonationCoder này để biết nguồn + thực thi của việc triển khai nhanh và bẩn.


2
Điều này là hoàn hảo. Có một exe với mã nguồn trên snemarch của luồng được đề cập để lấy mật khẩu tài khoản người dùng của tôi được lưu trữ trong kho tiền Workbench MySQL của tôi. Mặc dù các phương thức khác này có thể cũng hoạt động nếu tôi có quyền đọc hoặc cập nhật bảng người dùng.
RobbZ

Nhưng nói một cách tương đối, rất ít người đang sử dụng Workbench.
Pacerier

Đây là một triển khai khác có thể được chạy sau khi xây dựng với Visual Studio để khôi phục thông tin mật khẩu và tên người dùng được lưu trữ của Workbench: github.com/wclear/MyQueryWorkbenchPasswordViewer
bnp887

6

Làm điều đó mà không mất thời gian

Chạy lệnh sau trong Terminal để kết nối với DBMS (bạn cần quyền truy cập root):

sudo mysql -u root -p;

chạy mật khẩu cập nhật của người dùng đích (đối với tên người dùng ví dụ của tôi là mousavivà mật khẩu phải là 123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

tại thời điểm này, bạn cần thực hiện một thay đổi để áp dụng các thay đổi:

FLUSH PRIVILEGES;

Làm xong! Bạn đã làm điều đó mà không có bất kỳ dừng hoặc khởi động lại dịch vụ mysql.


5

Nếu bạn có quyền truy cập root vào máy chủ nơi mysql đang chạy, bạn nên dừng máy chủ mysql bằng lệnh này

sudo service mysql stop

Bây giờ bắt đầu mysql bằng lệnh này

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

Bây giờ bạn có thể đăng nhập vào mysql bằng cách sử dụng

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

Hướng dẫn đầy đủ có thể được tìm thấy ở đây http://www.techmatterz.com/recover-mysql-root-password/


3

Đăng nhập MySql từ windows cmd bằng người dùng hiện có:

tên người dùng mys -u -p
Nhập mật khẩu: ****

Sau đó chạy lệnh sau:

mysql> SELECT * FROM mysql.user;

Sau đó, sao chép mật khẩu md5 được mã hóa cho người dùng tương ứng và có một số ứng dụng giải mã mật khẩu trực tuyến có sẵn trên web. Sử dụng mật khẩu giải mã này và sử dụng mật khẩu này để đăng nhập trong lần tiếp theo. hoặc cập nhật mật khẩu người dùng bằng lệnh Flow:

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Sau đó đăng nhập bằng mật khẩu mới và người dùng.


0

NẾU bạn đã thiết lập ODBC, bạn có thể lấy mật khẩu từ tệp cấu hình ODBC. Đây là trong /etc/odbc.ini cho Linux và trong thư mục Phần mềm / ODBC trong sổ đăng ký trong Windows (có một số - có thể cần một số săn bắn)


0

Lưu các tập tin. Trong ví dụ này, tệp sẽ được đặt tên là C: \ mysql-init.txt. nó yêu cầu hoán vị hành chính để lưu tập tin


-1

Mặc dù cách giải thích nghiêm ngặt, hợp lý, khoa học máy tính cho câu hỏi của op sẽ yêu cầu cả "Làm cách nào để lấy lại tên người dùng MySQL của tôi" "mật khẩu" - Tôi nghĩ rằng nó có thể hữu ích cho ai đó để giải quyết OR cách giải thích . Nói cách khác ...

1) Làm cách nào để lấy lại tên người dùng MySQL của tôi?

HOẶC LÀ

2) mật khẩu

Điều kiện sau này dường như đã được giải quyết amply rồi nên tôi sẽ không bận tâm đến nó. Sau đây là giải pháp cho trường hợp "Làm thế nào để tôi truy xuất tên người dùng MySQL của tôi". HIH.

Để tìm tên người dùng mysql của bạn, hãy chạy các lệnh sau từ shell mysql ...

CHỌN người dùng TỪ mysql.user;

nó sẽ in một bảng của tất cả người dùng mysql.


1
Đây là một câu trả lời muộn và bạn chỉ nên đăng những điều này nếu giải pháp của bạn rõ ràng khác với đã được đăng hoặc chấp nhận. Không phải trong trường hợp này, đặc biệt là câu trả lời của bạn trùng lặp với câu trả lời được chấp nhận.
m.cekiera
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.