Đăng nhập nỗ lực đăng nhập MySQL


25

Thỉnh thoảng có những lần đăng nhập thất bại trong máy chủ sản xuất MySQL của chúng tôi (bảng điều khiển MySQL thông báo cho chúng tôi). Có cách nào để đăng nhập từng thành công và đăng nhập thất bại vào máy chủ MySQL mà không kích hoạt general_logkhông?

Chúng tôi nghĩ rằng đó general_logkhông phải là một lựa chọn do đó là một máy chủ sản xuất có tải trọng cao.



Theo quan chức của mysql: As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. Chỉ có phiên bản táo bạo mới có nó.
Tiina

Câu trả lời:


20

chỉ để thông báo cho người tò mò: khai thác nhật ký lỗi và uy tín của bạn!

(1). chỉnh sửa my.cnf (Tài liệu cài đặt được tìm thấy ở đây )

[mysqld]

: #Nhập tên cho tệp nhật ký lỗi. Nếu không, một tên mặc định sẽ được sử dụng.

log_error = / var / log / mysql / lỗi

: #defaults thành 1. Nếu giá trị> 1, các kết nối bị hủy và lỗi bị từ chối truy cập cho các lần thử kết nối mới được ghi vào nhật ký lỗi

log_warnings = 2

...

(2). lúc chạy lệnh

$ sudo mèo /var/log/mysql/error.err | egrep '[aA] bị từ chối'

(3). và bạn có nó!

(4). nếu bạn cần hạn chế người dùng (tấn công dos hoặc phục hồi mật khẩu người dùng mysql trong cơ sở dữ liệu nhiều người dùng), thì ( http://dev.mysql.com/doc/refman/5.5/en/user-resource.html )

mysql SỬ DỤNG CẤP TRÊN *. * ĐẾN 'kẻ tấn công' @ 'localhost' VỚI MAX_CONNECTIONS_PER_HOUR 100;

để hạn chế chỉ 100 lần khôi phục mật khẩu mỗi giờ.


2

Tôi nghĩ rằng nhật ký chung có thể ghi lại tất cả các lần thử đăng nhập (thành công và thất bại) trong số rất nhiều thứ khác. Vấn đề chính là nhật ký chung sẽ ảnh hưởng đến hiệu suất cơ sở dữ liệu của bạn. Bạn có thể bật nhật ký chung với truy vấn

SET GLOBAL general_log = 'on'

cho các phiên bản mới hơn của MySQL.


Đây là tạm thời hay vĩnh viễn?, Nếu nó là tạm thời có nghĩa là tôi cần sửa đổi /etc/mysql/my.cnfmysql?
DarckBlezzer

Nó là tạm thời. Cách tiếp cận đó có thể hoạt động hoặc bạn có thể thêm --general-logvào các cờ khi bạn khởi động MySQL.
rmc00

1

Xin chào, tôi không nghĩ là có thể.

Kể từ phiên bản mysql 5.1.29 - bạn có thể chỉ định tùy chọn lưu trữ (bảng hoặc tệp) và vị trí và nhật ký nào bạn muốn - lỗi, chung, nhị phân hoặc truy vấn chậm. Theo như tôi biết - bạn không thể chỉ định định dạng của nhật ký hoặc nội dung được ghi. Tôi có thể sai - nhưng tôi nghĩ rằng tất cả các thông tin đăng nhập sẽ được ghi vào nhật ký chung, và không phải là lỗi.

Tuy nhiên, giả sử máy chủ mysql của bạn đang chạy trên một máy riêng biệt, từ máy chủ applicaiton của bạn và bạn cần cổng 3306 (hoặc bất cứ thứ gì) mở và bạn không thể sử dụng đường hầm ssh, bất kỳ ai cũng có thể truy cập máy chủ mysql vô nghĩa Tôi khuyên bạn không nên để lộ lưu lượng truy cập web và nếu bạn phải (như trong trường hợp cư trú ở đâu đó không phải sau tường lửa của bạn), hãy liên kết nó với địa chỉ IP hoặc khối ip của máy chủ ứng dụng và ip quản trị viên của bạn (nơi bạn đang ở truy cập từ)

Mong rằng sẽ giúp.


1

Người ta có thể đăng nhập connectvà ra quitlệnh bằng cách sử dụng mysql-auditor-plugin.

  1. Tìm phiên bản phù hợp từ phiên bản mysql-aud-plugin , tôi đã sử dụng mysql 5.7, vì vậy tôi đã sử dụng audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip.
  2. di chuyển sotệp đã tải xuống đến nơi được cung cấp bởi mysqladmin variables | grep plugin_dir.
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. bật chức năng đăng nhập mysql>set global audit_json_file=ON, theo mặc định, nó ghi nhật ký tất cả các hoạt động thành công. bằng cách thiết lập set global audit_record_cmds='quit,connect'nó, các bản ghi chỉ kết nối và thoát khỏi giả sử, theo cấu hình của mysql-auditor-plugin .

Đây là cách nó trông trong tệp để đăng nhập và đăng xuất:

{"msg-type":"activity","date":"1543740612328","thread-id":"1015112","query-id":"3045222","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11575","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Quit","query":"Quit"} 

{"msg-type":"activity","date":"1543740724627","thread-id":"1015113","query-id":"0","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Connect","query":"Connect"}
{"msg-type":"activity","date":"1543740724629","thread-id":"1015113","query-id":"3045223","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"rows":"1","status":"0","cmd":"select","query":"select @@version_comment limit 1"}

0

nếu máy chủ được đề cập không nên có kết nối bên ngoài, như được định cấu hình, tôi sẽ lo lắng về một số cuộc tấn công vào máy chủ ứng dụng của bạn, trừ khi thông tin đăng nhập thất bại là từ các ứng dụng mới được triển khai trước khi người dùng / pass được cấu hình.

nếu máy chủ bằng cách nào đó tiếp xúc với các kết nối bên ngoài trên 3306, trừ khi đó là cố ý và cần thiết, tôi sẽ đặt cấu hình như Nick nói và cũng xem xét sử dụng iptables để hạn chế lưu lượng truy cập đến 3306 từ chỉ các máy chủ ứng dụng của bạn.


MySQL tự động từ chối các kết nối từ địa chỉ IP không có ít nhất một hàng phù hợp trong mysql.user
David M

0

Tại http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ , tác giả cho thấy một phương pháp để bắt các gói bằng tcpdump và lọc đầu ra dựa trên chuỗi.

Điều này giải quyết xung quanh mối quan tâm của bạn về general_log và hiệu suất, mặc dù tcpdump có thể phải chịu một hình phạt hiệu suất nhỏ. Giải pháp này cũng sẽ ghi lại ít dữ liệu hơn Nhật ký truy vấn chung.

Tôi đã không sử dụng điều này bản thân mình, nhưng nó có vẻ rất hữu ích.


Nghe có vẻ hay, nhưng liên kết không hoạt động với tôi.
CarlosH

Liên kết hoạt động với tôi sáng nay, sử dụng Firefox. mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski

Và tôi sẽ thích nghe kinh nghiệm của bạn với điều này.
Stefan Lasiewski
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.