Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách bảo mật MySQL:Phần một

Bất cứ khi nào đề cập đến bảo mật ứng dụng, mọi người đều nghĩ đến việc bảo mật ứng dụng trước một số cuộc tấn công thường xuyên nhất như tiêm, xác thực bị hỏng, lộ dữ liệu nhạy cảm, v.v. Tuy nhiên, trong khi các cuộc tấn công này phổ biến, chỉ biết cách bảo vệ ứng dụng của bạn khỏi chúng sẽ là không đủ - đặc biệt là khi bạn đang chạy MySQL. Hôm nay chúng ta sẽ xem xét một khía cạnh khác của bảo mật - chúng ta sẽ xem xét cách bảo mật MySQL đúng cách.

Vì bảo mật MySQL là một vấn đề khá lớn, hãy coi bài đăng này là phần mở đầu của một loạt bài đăng về các biện pháp bảo mật của MySQL. Chúng tôi sẽ không đề cập đến mọi thứ, nhưng bài đăng này sẽ cung cấp nền tảng của một số biện pháp bảo mật của MySQL.

Tại sao bạn cần bảo mật MySQL?

Trước hết, chúng ta phải trả lời câu hỏi tại sao chúng ta muốn bảo mật MySQL. Rốt cuộc, nếu chúng ta bảo mật ứng dụng của mình trước các mối đe dọa phổ biến nhất, chúng ta sẽ được an toàn, phải không? Vâng, có và không.

Bạn thấy đấy, khi bạn bảo mật ứng dụng của mình trước các cuộc tấn công nhất định, bạn đảm bảo rằng những kẻ tấn công sẽ khó thâm nhập vào hệ thống phòng thủ của ứng dụng hơn - để bảo mật cơ sở dữ liệu của bạn, việc bảo vệ chống lại các cuộc tấn công như vậy sẽ không đủ. Bảo mật cơ sở dữ liệu của bạn có thể là sợi dây cuối cùng có thể cứu ứng dụng của bạn (và cơ sở dữ liệu của bạn!) Khỏi bị phá hủy.

Làm cách nào để bảo mật MySQL?

Bây giờ, vào câu hỏi nóng bỏng. Bạn thực sự bảo mật MySQL như thế nào?

Khi nghĩ về tính bảo mật của (các) phiên bản MySQL của bạn, bạn nên xem xét một loạt các tùy chọn khả thi. May mắn thay, một số tùy chọn trong số đó thậm chí không giới hạn trong MySQL, nghĩa là chúng cũng sẽ được áp dụng trong các tình huống khác! Chúng ta sẽ bắt đầu với những điều chung chung.

Bảo mật MySQL - Chung

Khi bảo mật MySQL, hãy nhớ rằng nó sử dụng Danh sách kiểm soát truy cập (ACL) dựa trên bảo mật cho các hoạt động do người dùng thực hiện (Danh sách kiểm soát truy cập là danh sách các quyền được liên kết với một đối tượng). Dưới đây là cách xử lý một số vấn đề bảo mật cơ bản nhất:

  • Bảo mật tài khoản MySQL ban đầu - điều này rất hiển nhiên, nhưng bạn nên đảm bảo rằng tài khoản gốc có mật khẩu. Tài khoản gốc có thể có hoặc không có mật khẩu khi MySQL được cài đặt lần đầu - bạn có thể tìm ra mật khẩu là gì bằng cách kiểm tra nhật ký lỗi, sau đó thay đổi nó thành mật khẩu mạnh hơn nếu bạn muốn. Tất cả các tài khoản khác cũng phải có mật khẩu.
  • Không bao giờ lưu trữ mật khẩu bên trong bất kỳ cơ sở dữ liệu MySQL nào ở dạng văn bản thuần túy - hãy sử dụng hàm băm một chiều như BCrypt.
  • Không cấp cho bất kỳ người dùng nào quyền truy cập vào bảng người dùng trong cơ sở dữ liệu mysql (người dùng gốc là một ngoại lệ).

Ngoài ra, hãy tự làm quen với Kiểm soát truy cập và Quản lý tài khoản trong MySQL. Chủ đề này xứng đáng là một cuốn sách toàn bộ, nhưng những điều cơ bản bạn nên biết bao gồm:

  • Kiểm soát quyền truy cập trong MySQL;
  • Tạo, thay đổi và xóa người dùng;
  • Cấp và thu hồi các đặc quyền cho và từ người dùng;
  • Biết cách kiểm tra những đặc quyền nào được chỉ định;
  • Danh mục tài khoản là gì;
  • Tài khoản dành riêng là gì;
  • Các vai trò là gì;
  • Cách quản lý mật khẩu hoạt động;
  • Cách hoạt động của khóa tài khoản;
  • Xem qua các plugin bảo mật được cung cấp bởi MySQL;
  • Biết cách bảo mật các bản sao lưu MySQL.

Liên quan đến bảo mật MySQL, các bản sao lưu cũng nên được đề cập.

Bây giờ, chúng ta sẽ xem xét thêm từng tùy chọn này.

Kiểm soát Quyền truy cập trong MySQL

  • Như đã lưu ý ở trên, không bao giờ cấp cho bất kỳ tài khoản nào, ngoại trừ tài khoản gốc, quyền truy cập vào bảng người dùng trong cơ sở dữ liệu mysql;
  • Đảm bảo rằng tất cả các tài khoản MySQL hiện có chỉ sử dụng các đặc quyền mà chúng thực sự cần để thực hiện các hành động của mình.

Tạo, thay đổi và xóa người dùng trong MySQL

Trong MySQL, người dùng có thể được tạo bằng cách chạy truy vấn CREATE USER:

CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;

Người dùng có thể được thay đổi bằng cách chạy truy vấn ALTER USER - truy vấn cho phép bạn thực hiện nhiều việc khác nhau bao gồm khóa và mở khóa tài khoản, yêu cầu tài khoản kết nối bằng SSL, thiết lập số lượng kết nối tối đa mỗi giờ, hủy mật khẩu cũ, v.v. Đây là một truy vấn mẫu có thể thay đổi mật khẩu của riêng bạn:

ALTER USER USER() IDENTIFIED BY ‘password’;

Người dùng có thể bị xóa bằng cách chạy truy vấn DROP USER:

DROP USER ‘demouser’@’localhost’;

Cấp và Thu hồi Đặc quyền cho và từ Người dùng trong MySQL

Câu lệnh GRANT phải cấp đặc quyền hoặc vai trò. Câu lệnh ON có thể cho bạn biết liệu các đặc quyền hoặc vai trò sẽ được cấp hay không. Truy vấn sau cấp đặc quyền:

GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;

Truy vấn sau đây cấp các vai trò:

GRANT ‘demo_role’ TO ‘demouser’@’localhost’;

GRANT sẽ phản hồi với Truy vấn OK, 0 hàng bị ảnh hưởng.

Để thu hồi các đặc quyền nhất định từ người dùng, hãy sử dụng câu lệnh REVOKE (phần tên máy chủ của tên tài khoản được mặc định thành “%”):

REVOKE SELECT ON *.* FROM ‘demouser’@’localhost’;

Để thu hồi tất cả các đặc quyền, có thể sử dụng REVOKE ALL:

REVOKE ALL PRIVILEGES ON *.* FROM ‘demouser’@’localhost’;

Bạn có thể muốn phát hành QUYỀN RIÊNG TƯ CỦA FLUSH; sau khi thực hiện các bước trên.

Kiểm tra Đặc quyền nào được chỉ định trong MySQL

  • Để kiểm tra đặc quyền nào được chỉ định, hãy cấp SHOW GRANTS; tuyên bố.
  • Đối với mỗi yêu cầu được đưa ra, máy chủ sẽ xác định thao tác mà bạn muốn thực hiện, sau đó kiểm tra xem các đặc quyền của bạn có đủ để thực hiện thao tác được đề cập hay không.
  • Máy chủ sử dụng người dùng và bảng db trong cơ sở dữ liệu mysql để đảm bảo quyền kiểm soát truy cập.
  • Người dùng và bảng global_grants cấp các đặc quyền chung.

Phần còn lại của các tùy chọn sẽ được đề cập trong các bài viết sắp tới.

Tóm tắt

Về vấn đề bảo mật MySQL, bạn có rất nhiều tùy chọn để lựa chọn. Các tùy chọn bao gồm các biện pháp bảo mật cơ bản có thể áp dụng cho hầu hết các ứng dụng, nhưng một số tùy chọn khá cụ thể đối với MySQL. Hãy nhớ rằng không phải tất cả các tùy chọn có sẵn đều chưa được đề cập - chúng cũng sẽ được đề cập trong các phiên bản sắp tới của loạt bài về bảo mật MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để hủy thao tác INSERT trong trình kích hoạt MySql?

  2. CHÈN VÀO ... CHỌN cho tất cả các cột MySQL

  3. Hiển thị các giá trị từ bảng cơ sở dữ liệu MySQL bên trong bảng HTML trên trang web

  4. MySQL CONVERT_TZ ()

  5. Cách tính giá trị trung bình trong MySQL