Làm thế nào để bạn kiểm tra thông tin đăng nhập MySQL từ dòng lệnh trên máy chủ Linux?
Làm thế nào để bạn kiểm tra thông tin đăng nhập MySQL từ dòng lệnh trên máy chủ Linux?
Câu trả lời:
Câu trả lời của @ Phil và Câu trả lời của @ Mr.Brownstone đủ cho câu hỏi của bạn, vì vậy +1 cho cả hai.
Đối với những điều sau đây, giả sử bạn đang đăng nhập bằng tên người dùng myuser
Khi bạn đã kết nối với mysql, bạn nên chạy truy vấn sau:
SELECT USER(),CURRENT_USER();
Đôi khi, chúng khác nhau. Điều này có thể cung cấp cho bạn cái nhìn sâu sắc về lý do tại sao bạn được phép đăng nhập vào mysql.
Đây là một truy vấn khác bạn cần chạy:
SELECT CONCAT('''',user,'''@''',host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';
Điều này sẽ cho bạn thấy những cách mà bạn được phép đăng nhập như myuser
.
Nếu bạn thấy 'myuser'@'localhost'
, thì bạn có thể xác thực từ bên trong Máy chủ DB.
Nếu bạn thấy 'myuser'@'127.0.0.1'
và không thấy 'myuser'@'localhost'
, thì bạn có thể xác thực lại từ bên trong Máy chủ DB nhưng bạn phải chỉ định --protocol=tcp
từ dòng lệnh.
Nếu bạn thấy 'myuser'@'%'
, thì bạn có thể đăng nhập từ xa từ bất kỳ máy chủ nào.
Nếu bạn thấy 'myuse'r@'10.20.30,%'
, thì bạn chỉ có thể thực hiện đăng nhập từ xa từ 10,20.30.% Netblock.
Khi bạn thấy 'mysql.user' có gì cho người dùng của mình, bạn có thể muốn cho phép hoặc hạn chế myuser khỏi logggin theo một cách chứ không phải theo cách khác.
Nếu bạn chỉ muốn kiểm tra xem mật khẩu cho myuser
là whateverpassword
, bạn có thể làm như sau:
SELECT COUNT(1) Password_is_OK FROM mysql.user
WHERE user='myuser'
AND password=PASSWORD('whateverpassword');
Bạn có thể kiểm tra từ dòng lệnh như sau:
PASSWORDISOK=`mysql -uroot -p... -ANe"SELECT COUNT(1) Password_is_OK FROM mysql.user WHERE user='myuser' AND password=PASSWORD('whateverpassword')"`
Nếu bạn không root
và chỉ muốn kiểm tra myuser, bạn có thể làm điều này:
PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`
Nếu bạn nhận được 1, mật khẩu cho myuser được xác minh là tốt.
mysql -h host -u user -p<whatever> -e"quit"
Điều này cho phép bạn sử dụng cùng một chuỗi kết nối mà bạn sử dụng để gửi các truy vấn đến máy chủ theo chương trình. Bạn có thể thêm || exit 1
vào cuối để tự động thoát trên các đối số không hợp lệ. Bạn cũng có thể muốn chuyển hướng stderr đến /dev/null
nếu bạn không thích thông báo lỗi MySQL được tạo tự động.
Bạn có thể sử dụng lệnh sau (giả sử rằng bạn đã thiết lập mysql trong PATH của mình):
máy chủ mys -h -u người dùng -p
Chỉ cần thay thế máy chủ và người dùng bằng các giá trị chính xác và sau đó bạn sẽ được nhắc nhập mật khẩu của mình.