Đây có phải là một tập hợp đặc quyền bình thường của MySQL không?


9

Sử dụng phpmyadmin trên thiết lập wamp thử nghiệm cục bộ và cũng như khá nhiều trạng thái tiêu đề, có 3 người dùng được đánh dấu là user = ANY, password = NO, chẳng hạn như:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Không ai trong số 3 người dùng có bất kỳ đặc quyền cụ thể nào cho bất kỳ bảng nào, vì vậy có vẻ như họ không thể làm được gì nhiều. Đây có phải là một số biện pháp bảo mật chung, để tuyên bố rõ ràng rằng 'Bất kỳ' người dùng nào không thuộc bất kỳ nhóm người dùng nào khác không có đặc quyền?


Đây thực sự là một câu hỏi rất hay vì mysql đi kèm với các quyền mặc định không được công bố. +1 !!!
RolandoMySQLDBA

Câu trả lời:


6

Trong thực tế, ba tài khoản người dùng đó thực sự khá nguy hiểm. Họ đặt ra một mối đe dọa rất lớn để kiểm tra cơ sở dữ liệu.

Thật không may, mysql đi kèm với quyền truy cập đầy đủ vào cơ sở dữ liệu thử nghiệm. Làm thế nào bạn có thể tìm thấy chúng?

Chạy truy vấn này:

 SELECT user,host,db from mysql.db;

Khi cài đặt mysql, bạn sẽ thấy hai hàng cung cấp quyền truy cập đầy đủ vào bất kỳ cơ sở dữ liệu nào có tên 'test' hoặc có 5 ký tự đầu tiên là 'test_'.

Tại sao điều này là một vấn đề ???

Hãy thử chạy lệnh này:

$ mysql -u'' -Dtest

Bạn sẽ kết nối cơ sở dữ liệu kiểm tra mà không cần mật khẩu.

Bây giờ, tạo một bảng và tải nó với một hàng:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, vấn đề lớn. Bạn có thể tăng gấp đôi bảng này trong kích thước 30 lần ???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

Bạn được những gì ?? Một bảng có 1.073.741.824 hàng. Dễ dàng, 4GB +.

Hãy tưởng tượng tạo ra bất kỳ bảng có kích thước bất kỳ. Làm thế nào về việc tạo ra một loạt các bảng trong cơ sở dữ liệu thử nghiệm và tự do truy cập chúng theo ý muốn?

Điều tốt nhất bạn có thể làm trong những trường hợp này là chạy truy vấn này:

DELETE FROM mysql.db;

và khởi động lại mysql. Sau đó, ba tài khoản đó sẽ được kết xuất không hoạt động.

Hãy thử một lần !!!

CẬP NHẬT 2011-09-12 10:00 EDT

Điều này xóa:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

chỉ là những gì bạn cần cho một cài đặt ban đầu. Tuy nhiên, nếu bạn đã có người dùng được thiết lập, bạn có thể chạy cái này thay thế:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Điều này sẽ loại bỏ hai quyền DB cụ thể.

Như tôi đã đề cập trong câu trả lời của mình, ba quyền rất nguy hiểm cho cơ sở dữ liệu thử nghiệm. Chạy DELETE này sẽ vô hiệu hóa các tài khoản đó để có toàn quyền kiểm tra cơ sở dữ liệu.


Cảm ơn bạn đã giải thích, nhưng sẽ XÓA TỪ mysql.db xóa bất cứ điều gì khác một phần từ 3 người dùng đó? Tôi không muốn xóa bất kỳ dữ liệu / quyền riêng tư nào ngoài 3 dữ liệu đó
Chris

@Chris - Tôi đã cập nhật câu trả lời của tôi 3 giờ trước để giải quyết bình luận của bạn.
RolandoMySQLDBA

-1

Nguy cơ của việc giữ các tài khoản tài khoản ẩn danh này đã được giải thích rất rõ.

Hướng dẫn cung cấp danh sách kiểm tra toàn diện các bước cần thực hiện để " Bảo mật tài khoản MySQL ban đầu ".

Cụ thể, phần "Gán mật khẩu tài khoản ẩn danh" khuyên bạn nên xóa các tài khoản này.

Ngoài ra, chương "Bảo mật cơ sở dữ liệu kiểm tra" khuyên:

Theo mặc định, mysql.dbbảng chứa các hàng cho phép bất kỳ người dùng nào truy cập vào testcơ sở dữ liệu và các cơ sở dữ liệu khác có tên bắt đầu bằng test_. (...) Điều này có nghĩa là các cơ sở dữ liệu đó có thể được sử dụng ngay cả bởi các tài khoản không có đặc quyền. Nếu bạn muốn xóa quyền truy cập của bất kỳ người dùng nào vào cơ sở dữ liệu thử nghiệm, hãy làm như sau:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Với thay đổi trước đó, chỉ những người dùng có đặc quyền hoặc đặc quyền cơ sở dữ liệu toàn cầu được cấp rõ ràng cho cơ sở dữ liệu thử nghiệm mới có thể sử dụng nó.

Đặc biệt, trên các hệ thống không phải Windows, nên chạy mysql_secure_installationtập lệnh. Trình cài đặt Windows tôi tin rằng cung cấp một số cấu hình cài đặt. Một số trong số họ sẽ tự động vô hiệu hóa các cài đặt không an toàn. Nếu không, danh sách kiểm tra sẽ cần phải được chạy thủ công.

Chăm sóc phải được thực hiện với các trình cài đặt của bên thứ ba như WAMP. Các quyền mặc định được chỉ định trong Hướng dẫn sử dụng MySQL chính thức có thể không phải lúc nào cũng áp dụng cho các cài đặt tùy chỉnh này (như trong "ngoài phạm vi của hướng dẫn sử dụng). Tất nhiên, đối với máy chủ sản xuất, phải tránh cài đặt WAMP và thích .


Tại sao các downvote về câu trả lời này?
user12345
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.