Làm cách nào tôi có thể khiến máy khách MySQL đọc mật khẩu từ mylogin.cnf?


11

Tôi đang cố gắng làm cho máy khách mysql kết nối với máy chủ mysql mà không yêu cầu mật khẩu phải được cung cấp tương tác. Các bước thực hiện:

1) Đầu tiên tạo tập tin mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) Tệp được tạo thành công:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Kết nối bằng máy khách mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Có một giá trị / cấu hình mặc định ở đâu đó khiến máy khách bỏ qua mật khẩu trong mylogin.cnf không? Các thuộc tính người dùng và máy chủ được đọc chính xác từ tệp.

Tôi có thể kết nối tốt nếu tôi cung cấp mật khẩu trên dòng lệnh:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

Phiên bản máy khách MySQL là 5.6.22, phiên bản Máy chủ MySQL là 5.6.22, cả trên Oracle Linux 6. Máy khách và máy chủ đều nằm trên các máy chủ khác nhau.

Cảm ơn

Câu trả lời:


1

Bất cứ cách nào bạn làm điều này, có lẽ bạn sẽ có một mật khẩu được lưu ở đâu đó. Ngay cả đường dẫn đăng nhập MySQL 5.6 cũng dễ dàng được giải mã bởi bất kỳ ai có động lực. Cảnh báo đó cho biết, đây sẽ là một giải pháp dễ dàng.

Trong tập lệnh môi trường của bạn (ví dụ ~/.profilehoặc ~/.bashrc), đặt

alias mysql='mysql -uUser -pPasswd -hHostname'

(dĩ nhiên, người dùng mong muốn, Passwd và Tên máy chủ của bạn.)

Sau khi relogin shell, bạn sẽ có thể chỉ cần làm

mysql

... sẽ sử dụng bí danh của bạn và kết nối với DB và bỏ qua mọi mật khẩu trong .my.cnftệp.

Lưu ý bảo mật: Nếu có người dùng khác trên máy chủ của bạn, bạn có thể muốn kiểm tra 700 tập lệnh hồ sơ của mình để mật khẩu không dễ bị người khác truy cập. Bất kỳ quản trị viên nào với root hoặc sudo sẽ có thể thấy nó vẫn còn; không có cách nào khác


Đây là một vấn đề xoay quanh vấn đề thực tế, nhưng tôi ổn điều này. Tôi chấp nhận câu trả lời này với tuyên bố từ chối trách nhiệm với độc giả tương lai rằng cách thức phù hợp để làm điều đó là câu trả lời của Nawaz, nhưng điều đó không hoạt động trên môi trường của tôi vì một lý do không xác định. Cảm ơn!
Lefteris Koutsoloukas

1
-1 điều này không trả lời truy vấn của OP và cũng không tránh để lưu mật khẩu trong một tệp. mật khẩu hiện được lưu trữ trong .profile thay vì .mylogin.cnf. Nhưng bây giờ mật khẩu được hiển thị bằng lệnh ps.
phép lạ173

@miracle, vui lòng xác nhận yêu cầu của bạn rằng ps sẽ tiết lộ mật khẩu. Trên hệ thống của tôi, mật khẩu hiển thị dưới dạng xxxxxxx trong đầu ra ps. Nếu máy khách MySQL của bạn không hoạt động như của tôi, vui lòng đăng phiên bản mysql và bản phân phối bạn đang chạy. Và bạn có câu trả lời tốt hơn cho câu hỏi thực tế của OP không?
Joshua Huber

2
@joshua: Nguyên tắc của người dùng cuối về bảo mật mật khẩu : "Sử dụng một -pyour_passhoặc --password=your_passtùy chọn trên dòng lệnh (...) Điều này thuận tiện nhưng không an toàn ."
phép lạ173

10

sử dụng lệnh sau để đặt đường dẫn đăng nhập trước

mysql_config_editor đặt --login-path = lgpath --user = root -p
mật khẩu

và sau đó sử dụng lệnh dưới đây để đăng nhập mysql

mysql --login-path = lgpath

Trợ giúp về các tùy chọn đường dẫn đăng nhập mysql có thể được nhìn thấy bởi

bộ mysql_config_editor - trợ giúp


Tôi đã thử thiết lập đường dẫn đăng nhập một cách rõ ràng như bạn đề xuất, nhưng thật không may, nó có hành vi tương tự: $ mysql_config_editor print --all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpath ERROR 1045 (28000): Truy cập bị từ chối cho người dùng '<user>' @ '<host>' (sử dụng mật khẩu: NO)
Lefteris Koutsoloukas 2/215

3

Tôi đã có cùng một vấn đề như OP, nhưng câu trả lời trong chủ đề này làm tôi bối rối. Liên kết của Vinay Mandala thực sự làm việc cho tôi. Đăng lại ở đây cho rõ ràng.

Vấn đề của tôi:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Nó chứng minh rằng mysql_config_editorkhông xử lý các ký tự đặc biệt trong mật khẩu đúng cách.

Giải pháp:

Khi mysql_config_editornhắc bạn nhập mật khẩu, hãy đảm bảo rằng bạn bao quanh mật khẩu trong dấu ngoặc kép (") . Sau đó, bạn có thể đăng nhập tốt.


1

Tôi đã nhận được lỗi này, ngoại trừ nó nói (sử dụng mật khẩu: CÓ)

Lý do như được đề cập bởi Giovanni là vì "#" trong mật khẩu. Tôi thấy rằng một cách giải quyết là chèn dấu ngoặc kép quanh mật khẩu của bạn khi được nhắc. Hạn chế tương tự tồn tại với mật khẩu văn bản đơn giản bằng cách sử dụng .my.cnf.


0

Câu trả lời của Nawaz là chính xác. Tôi có ít để thêm. Tôi khuyên bạn nên thực hiện một số lần thử với biến môi trường MYSQL_TEST_LOGIN_FILE để tạo một tệp cấu hình mới, chỉ trong trường hợp tệp mặc định bị hỏng. Sử dụng cũng --no-defaultsđể bỏ qua .cnfcác tập tin. Nếu mật khẩu chứa char #, mysql login-pathkhông hoạt động.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

Biến môi trường này không được đặt. Tôi đặt nó nhưng tôi có chính xác hành vi tương tự. Nó bỏ qua mật khẩu trong mylogin.cnf.
Lefteris Koutsoloukas

Bạn có chắc người dùng thực thi mysqllệnh là mysqlgì không? Nếu không, hãy thay đổi chủ sở hữu mylogin.cnfvà nó sẽ hoạt động :)
Iazel

0

Tôi đang gặp một vấn đề tương tự như các poster ban đầu. Tôi nghi ngờ nó phải làm với các ký tự trong mật khẩu không được mã hóa / giải mã đúng cách.

Để xác nhận hãy thử thay đổi mật khẩu thành một cái gì đó đơn giản và xem vấn đề này có biến mất không.


Tôi gặp vấn đề tương tự. Như Plazgoth đã chỉ ra, tôi có một ký tự đặc biệt trong mật khẩu và nó không hoạt động. Điều làm việc cho tôi là đề xuất từ ​​người dùng bglad trên bài đăng
Vinay Mandala

0

Tôi đã có vấn đề này với một kịch bản shell. Tập lệnh của tôi đã thay đổi giá trị $ HOME và điều này khiến --login-path = *** dường như bị bỏ qua. Khi tôi ngừng thay đổi giá trị $ HOME thì nó bắt đầu hoạt động.


0

LƯU Ý nếu bạn đang cố chạy bên pathdưới người dùng linux root - Bạn không thể đơn giản sử dụng sudo. Bạn phải đăng nhập bằng IE gốc

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

Cũng như được đề cập trong các bài viết khác ở đây .. Bạn phải sử dụng dấu ngoặc kép xung quanhmysql mật khẩu của mình nếu nó chứa bất kỳ thứ gì ngoài các ký tự chữ và số.

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.