1. Trang chủ
  2. » Công Nghệ Thông Tin

Báo cáo bảo mật MYSQL

17 237 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bộ Thông Tin & Truyền Thông Học Viện Công Nghệ Bưu Chính Viễn Thơng z An Tồn Ứng Dụng Web Cơ Sở Dữ Liệu Đề tài: Phân tích vấn đề bảo mật hệ quản trị sở liệu mysql GVHD Lớp : Huỳnh Thanh Tâm : D14CQAT01 Sinh viên thực hiện: Đỗ Khắc Phong Ngô Bá Duy Tân Đại Đỗ Hoàng Nhân Phạm Bá Sáng Nguyễn Ngọc Hùng Lế Khắc Tuấn Lương Hoàng Lâm MSSV: MSSV: MSSV: MSSV: MSSV: MSSV: MSSV: MSSV: N14DCAT106 N14DCAT064 N14DCAT031 N14DCAT056 N14DCAT125 N14DCAT042 N14DCAT113 N14DCAT128 Understanding the mysql.user Table - Hiểu bảng mysql.user MySQL lưu trữ thông tin tài khoản người dùng bảng sở liệu hệ thống mysql Các bảng người dùng quan trọng chứa tên tài khoản thông tin đăng nhập Đến xem cấu trúc nó, sử dụng câu lệnh này: SHOW CREATE TABLE mysql.user; Các cột bảng người dùng liên quan đến rõ tên tài khoản xác thực thông tin: Các cột Người dùng Máy chủ xác định tài khoản Tên tài khoản MySQL bao gồm kết hợp tên người dùng giá trị tên máy Ví dụ, bảng người sử dụng hàng cho tài khoản 'cbuser'@'localhost', giá trị cột User and Host cbuser localhost tương ứng Đối với tài khoản 'myuser'@'myhost.example.com', cột myuser myhost.example.com - Các plugin, mật cột xác thực xác thực kho lưu trữ giấy chứng nhận MySQL không lưu mật chữ bảng hệ thống người sử dụng khơng an tồn Thay vào đó, máy chủ tính giá trị băm từ mật lưu chuỗi hash - Cột plugin cho biết plugin xác thực mà máy chủ sử dụng kiểm tra chứng cho khách hàng cố gắng sử dụng tài khoản Các trình cắm khác thực phương pháp băm mật cường độ mã hóa khác Sau bảng hiển thị trình cắm thêm chương thảo luận: Plug-in Authentication method mysql_native_password Native password hashing mysql_old_password “Old” native password hashing (deprecated) sha256_password SHA-256 password hashing (MySQL 5.6.6 or later) MySQL Enterprise, phiên thương mại MySQL, bao gồm bổ sung để xác thực cách sử dụng thông tin PAM Windows Chúng cho phép sử dụng mật bên để MySQL, chẳng hạn mật đăng nhập Unix Windows nguyên dịch vụ - Cột Password sử dụng cột plugin mysql_native_pass word or mysql_old_password Giá trị Password trống có nghĩa “no password”, mà khơng an tồn Giá trị khơng rỗng đại diện cho mật băm định dạng yêu cầu trình cắm thêm tương ứng - Cột authentication_string sử dụng trình cắm thêm khơng sử dụng cột Password Ví dụ: sha256_password sử dụng authentica tion_string để lưu trữ giá trị băm mật SHA-256, mã hoá tốt so với băm gốc dài cột Password Trước MySQL 5.7.2, máy chủ cho phép giá trị plugin trống Như MySQL 5.7.2, cột plugin phải không rườm rà máy chủ vơ hiệu hóa empty-plug-in tài khoản plug-in không rườm rà định Tuy nhiên, trước 5.7.2, tốt tài khoản có giá trị khơng rỗng: Nếu cột plugin cho tài khoản trống, máy chủ xác thực khách hàng sử dụng mysql_native_password or mysql_old_password ngầm, làm cho lựa chọn dựa định dạng giá trị băm lưu trữ cột Password Plug-in không rườm rà làm cho phương pháp xác thực rõ ràng - Nếu bạn chạy phiên cũ 5.7, sửa đổi tất tài khoản để có giá trị plugin nonempty giúp tránh vấn đề bạn nâng cấp lên 5.7 Nếu bảng người dùng bạn chứa tài khoản có giá trị plugin trống sử dụng không dùng mysql_old_password plug-in, bạn sửa chúng Managing User Accounts – Quản lý tài khoản người dùng Vấn đề Bạn có trách nhiệm thiết lập tài khoản máy chủ MySQL bạn Giải pháp Tìm hiểu cách sử dụng câu lệnh SQL quản lý tài khoản Thảo luận Nó khả thi sửa đổi bảng cấp sở liệu mysql trực tiếp với câu lệnh SQL chẳng hạn INSERT UPDATE, câu lệnh quản lý tài khoản MySQL nhiều tiện lợi Phần mô tả cách sử dụng bao gồm chủ đề này: - Tạo tài khoản (CREATE USER, SET PASSWORD) - Gán kiểm tra quyền ưu tiên (GRANT, REVOKE, SHOW GRANTS) - Xóa đổi tên tài khoản (DROP USER, RENAME USER) Tạo tài khoản Để tạo tài khoản, sử dụng câu lệnh CREATE USER, tạo hàng mysql.user bảng Nhưng trước bạn làm vậy, định ba điều sau: - Tên tài khoản, trình bày 'user_name'@'host_name' định dạng đặt tên người dùng máy chủ lưu trữ mà từ người dùng kết nối Mật tài khoản - Plug-in xác thực máy chủ phải thực khách hàng cố gắng sử dụng tài khoản Plugin xác thực sử dụng băm để mã hóa mật để lưu trữ truyền MySQL tích hợp sẵn số trình cắm thêm để chọn: - mysql_native_password thực phương pháp băm mật mặc định mysql_old_password tương tự sử dụng phương thức băm an tồn bị phản đối Tránh lựa chọn plug-in cho tài khoản Nếu máy chủ bạn tài khoản có sử dụng nó, Cơng thức thảo luận cách xác định sửa đổi chúng để sử dụng mysql_native_password thay - sha256_password xác thực cách sử dụng giá trị băm mật SHA-256, mật mã an toàn băm tạo mysql_native_pass từ Plug-in có sẵn MySQL 5.6.6 Nó cung cấp bảo mật ngồi cung cấp mysql_native_password thiết lập bổ sung yêu cầu để sử dụng (Khách hàng phải kết nối SSL cung cấp chứng RSA.) Câu lệnh CREATE USER thường sử dụng trong hình thức sau: CREATE USER 'user_name'@'host_name' IDENTIFIED BY 'password'; CREATE USER 'user_name'@'host_name' IDENTIFIED WITH 'auth_plugin'; Cú pháp tạo tài khoản đặt mật câu lệnh Nó gán plug-in xác thực ngầm, loại: - Trước MySQL 5.6.6, câu lệnh rời khỏi cột plugin trống người dùng bảng hàng cho tài khoản Nó thích hợp cho plug-in khơng rỗng, lý thảo luận công thức - Theo 5.6.6, tuyên bố gán plug-in đặt tên - - default authenticationplugin (đó mysql_native_password, trừ bạn thay đổi khởi động máy chủ) Với cú pháp thứ hai, bạn phải đặt mật riêng biệt cách sử dụng SET PASSWORD tuyên bố, bạn xác định cụ thể plug-in, ln ln rõ ràng mà hàng bảng người dùng cho tài khoản chứa Để tạo tài khoản theo cách hoạt động liên tục cho phiên MySQL từ 5.5 để đảm bảo giá trị plugin không vĩnh cửu định, sử dụng cách tiếp cận này: - Tạo tài khoản cách sử dụng câu lệnh CREATE USER có tên xác thực plug-in cách rõ ràng Ngoài ra, đặt biến hệ thống old_passwords để chọn mật băm thích hợp cho trình cắm thêm (điều ảnh hưởng đến PASSWORD () chức bước tiếp theo) Các trình tự sau cho thấy làm để làm điều cho cắm vào: CREATE USER 'user_name'@'host_name' IDENTIFIED WITH 'mysql_native_password'; SET old_passwords = 0; CREATE USER 'user_name'@'host_name' IDENTIFIED WITH 'mysql_old_password'; SET old_passwords = 1; CREATE USER 'user_name'@'host_name' IDENTIFIED WITH 'sha256_password'; SET old_passwords = 2; - Đặt mật tài khoản SET PASSWORD FOR 'user_name'@'host_name' = PASSWORD('password'); Các PASSWORD () chức băm mật theo the old_passwords giá trị định Để gán đặc quyền cho tài khoản mới, khơng có đầu nào, sử dụng câu lệnh GRANT mô tả sau phần CREATE USER thành công tài khoản tồn Viết thủ tục trợ giúp tạo tài khoản Để tạo tài khoản dễ dàng hơn, viết thủ tục lưu trữ trợ giúp đặt tên create_user () thực tất công việc, với tên tài khoản, tên máy chủ, mật khẩu, trình cắm xác thực: - Nó phát hành câu lệnh CREATE USER thích hợp để xác định cụ thể trình cắm thêm Nó thiết lập mật mật cho NULL, để lại mật hủy bỏ (Có lẽ bạn định NULL bạn định gán mật sau) - Trước đặt mật khẩu, chăm sóc thiết lập biến hệ thống old_passwords đến giá trị thích hợp cho trình cắm cụ thể Nó lưu khơi phục giá trị old_passwords tại, để lại giá trị phiên bạn không bị xáo trộn - Để thực sách mà người dùng phải chọn mật mình, sử dụng ALTER USER hết hạn mật Thủ tục bỏ qua phần ALTER USER khơng có sẵn (máy chủ cũ MySQL 5.6.7) tài khoản dành cho người dùng vô danh (người đặt mật tài khoản để thiếu nó) Để biết thêm thông tin việc hết hạn mật Phân công kiểm tra đặc quyền Giả sử bạn vừa tạo tài khoản có tên 'user1' @ 'localhost' Bạn gán đặc quyền cho GRANT, loại bỏ đặc quyền từ với REVOKE, kiểm tra đặc quyền với SHOW GRANTS GRANT có cú pháp này: GRANT privileges ON scope TO account; Đây, tài khoản đặt tên cho tài khoản để cấp đặc quyền, đặc quyền họ gì, phạm vi phạm vi đặc quyền, mức độ mà họ áp dụng Các đặc quyền giá trị ALL (hoặc ALL PRIVILEGES) để xác định tất đặc quyền có sẵn cấp độ định, danh sách dấu phẩy nhiều đặc quyền tên SELECT CREATE (Để thảo luận đầy đủ đặc quyền có sẵn cú pháp GRANT khơng hiển thị đây, xem Hướng dẫn tham khảo MySQL.) Các ví dụ sau minh hoạ cho cú pháp để cấp đặc quyền cấp - Cấp đặc quyền toàn cầu cho phép tài khoản thực hoạt động quản trị hoạt động sở liệu: GRANT FILE ON *.* TO 'user1'@'localhost'; GRANT CREATE TEMPORARY TABLES, LOCK TABLES ON *.* TO 'user1'@'localhost'; - Cấp đặc quyền cấp sở liệu cho phép tài khoản thực hoạt động đối tượng sở liệu đặt tên: GRANT ALL ON cookbook.* TO 'user1'@'localhost'; Cấp đặc quyền cấp độ bảng cho phép tài khoản thực hoạt động bảng có tên: GRANT SELECT ON mysql.user TO 'user1'@'localhost'; Cấp đặc quyền cấp độ cột cho phép tài khoản thực hoạt động cột bảng đặt tên: GRANT SELECT(User,Host), UPDATE(password_expired) ON mysql.user TO 'user1'@'localhost'; Việc cấp đặc quyền cấp thủ tục cho phép tài khoản thực hoạt động thủ tục lưu trữ tên: GRANT EXECUTE ON PROCEDURE cookbook.exec_stmt TO 'user1'@'localhost'; Sử dụng FUNCTION PROCEDURE thủ tục chức lưu trữ Để xác minh tập đặc quyền, sử dụng SHOW GRANTS: mysql> SHOW GRANTS FOR 'user1'@'localhost'; + + | Grants for user1@localhost | + + | GRANT FILE, CREATE TEMPORARY TABLES, LOCK TABLES | | ON *.* TO 'user1'@'localhost' | | GRANT ALL PRIVILEGES ON `cookbook`.* TO 'user1'@'localhost' | | GRANT SELECT, SELECT (User, Host), UPDATE (password_expired) | | ON `mysql`.`user` TO 'user1'@'localhost' | | GRANT EXECUTE ON PROCEDURE `cookbook`.`exec_stmt` TO 'user1'@'localhost' | + + Để xem đặc quyền riêng bạn, bỏ qua mệnh đề FOR REVOKE cú pháp nói chung tương tự GRANT sử dụng FROM TO: REVOKE privileges ON scope FROM account; Do đó, để loại bỏ đặc quyền cấp cho 'user1' @ 'localhost', sử dụng RE VOKE tuyên bố (và SHOW GRANTS để xác minh họ gỡ bỏ): mysql> REVOKE FILE ON *.* FROM 'user1'@'localhost'; mysql> REVOKE CREATE TEMPORARY TABLES, LOCK TABLES -> ON *.* FROM 'user1'@'localhost'; mysql> REVOKE ALL ON cookbook.* FROM 'user1'@'localhost'; mysql> REVOKE SELECT ON mysql.user FROM 'user1'@'localhost'; mysql> REVOKE SELECT(User,Host), UPDATE(password_expired) -> ON mysql.user FROM 'user1'@'localhost'; mysql> REVOKE EXECUTE ON PROCEDURE cookbook.exec_stmt -> FROM 'user1'@'localhost'; mysql> SHOW GRANTS FOR 'user1'@'localhost'; + -+ | Grants for user1@localhost | + -+ | GRANT USAGE ON *.* TO 'user1'@'localhost' | + -+ Xóa tài khoản Để thoát khỏi tài khoản, sử dụng câu lệnh DROP USER: DROP USER 'user1'@'localhost'; Câu lệnh xóa tất hàng liên kết với tài khoản tất bảng cấp; bạn cần không sử dụng REVOKE để loại bỏ đặc quyền Lỗi xảy tài khoản không hữu Đổi tên tài khoản Để thay đổi tên tài khoản, sử dụng RENAME USER, xác định tên mới: RENAME USER 'currentuser'@'localhost' TO 'newuser'@'localhost'; Lỗi xảy tài khoản không tồn tài khoản tồn Implement Password Policy - Thực sách mật Vấn Đề Bạn muốn đảm bảo tài khoản MySQL không sử dụng mật yếu Giải pháp Sử dụng validate_password plug-in để thực sách mật Mật phải đáp ứng sách, cho dù người lựa chọn DBA cho tài khoản tài khoản có người dùng thay đổi mật họ Thảo luận Kỹ thuật yêu cầu bật plug-in validate_password Đối với việc cài đặt plug-in, Khi validate_password kích hoạt, hiển thị biến hệ thống cho phép bạn phải cấu hình Đây giá trị mặc định: mysql> SHOW VARIABLES LIKE 'validate_password%'; + + + | Variable_name | Value | + + + | validate_password_dictionary_file | | | validate_password_length | | | validate_password_mixed_case_count | | | validate_password_number_count | | | validate_password_policy | MEDIUM | | validate_password_special_char_count | | + + + Giả sử bạn muốn thực sách thực thi yêu cầu mật khẩu: - Tối thiểu 10 ký tự - Chứa chữ hoa chữ thường - Có hai chữ số - Chứa ký tự đặc biệt (không chứa ký tự) Để đưa sách vào vị trí, khởi động máy chủ với tùy chọn cho phép plug-in thiết lập giá trị biến hệ thống cấu hình u cầu sách Ví dụ, đặt dòng vào tập tin tùy chọn máy chủ bạn: [mysqld] plugin-load-add=validate_password.so validate_password_length=10 validate_password_mixed_case_count=1 validate_password_number_count=2 validate_password_special_char_count=1 Sau khởi động máy chủ, xác minh cài đặt: mysql> SHOW VARIABLES LIKE 'validate_password%'; + + + | Variable_name | Value | + + + | validate_password_dictionary_file | | | validate_password_length | 10 | | validate_password_mixed_case_count | | | validate_password_number_count | | | validate_password_policy | MEDIUM | | validate_password_special_char_count | | + + + Bây plug-in validate_password ngăn việc gán mật yếu cho sách: mysql> SET PASSWORD = PASSWORD('weak-password'); ERROR 1819 (HY000): Your password does not satisfy the current policy requirements mysql> SET PASSWORD = PASSWORD('Str0ng-Pa33w@rd'); Query OK, rows affected (0.00 sec) Các hướng dẫn trước rời khỏi biến hệ thống validate_password_policy thiết lập giá trị mặc định (Medium), bạn thay đổi cách mà máy chủ kiểm tra mật khẩu: - MEDIUM cho phép kiểm tra độ dài mật số lượng chữ số, chữ hoa chữ thường ký tự đặc biệt - Để nghiêm ngặt hơn, thiết lập sách LOW, cho phép kiểm tra chiều dài Cũng cho phép mật ngắn hơn, giảm chiều dài yêu cầu (validate_password_length) - Để nghiêm túc hơn, đặt sách sang STRONG, giống MEDIUM cho phép bạn có mật kiểm tra tập tin từ điển, để ngăn ngừa sử dụng mật phù hợp với từ tệp So sánh không phân biệt chữ hoa chữ thường Để sử dụng tệp từ điển, đặt giá trị tệp validate_password_dictionary_file tên tập tin khởi động máy chủ Tệp phải chứa từ viết thường, từ hàng Phân phối MySQL bao gồm tệp dictionary.txt thư mục chia sẻ bạn sử dụng, hệ thống Unix thường có tập tin / usr / share / dict / words.Việc đặt sách mật chỗ không ảnh hưởng đến mật Để yêu cầu người dùng để chọn mật thỏa mãn sách, hết hạn mật họ (xem phần 23.5) Checking Password Strength - Kiểm tra độ mạnh mật Vấn Đề Bạn muốn gán thay đổi mật trước tiên xác định khơng yếu Giải Pháp Sử dụng hàm VALIDATE_PASSWORD_STRENGTH() Thảo luận Plug-in validate_password không thực sách cho mật mới, cung cấp hàm SQL, VALIDATE_PASSWORD_STRENGTH (), cho phép kiểm tra sức mạnh mật tương lai Sử dụng chức bao gồm: - Một quản trị viên muốn kiểm tra mật gán cho tài khoản - Một người dùng cá nhân muốn chọn mật yêu cầu đảm bảo trước mạnh Để sử dụng VALIDATE_PASSWORD_STRENGTH (), plug-in validate_password phải bật Để biết hướng dẫn cài đặt plug-in VALIDATE_PASSWORD_STRENGTH () trả giá trị từ (yếu) đến 100 (mạnh): mysql> SELECT VALIDATE_PASSWORD_STRENGTH('abc') ; + -+ | VALIDATE_PASSWORD_STRENGTH('abc') | + -+ |0| + -+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('weak-password'); + -+ | VALIDATE_PASSWORD_STRENGTH('weak-password') | + -+ | 50 | + -+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('Str0ng-Pa33w@rd'); + -+ | VALIDATE_PASSWORD_STRENGTH('Str0ng-Pa33w@rd') | + -+ | 100 | + -+ Expiring Passwords - Mật hết hạn Vấn đề Muốn người dùng chọn mật MySQL Giải pháp Có thơng báo thay đổi dành cho người dùng việc mật hết hạn Thảo luận MySQL 5.6.7 cập nhật cung cấp thông báo dành cho người dùng quản trị viên vơ hiệu mật tài khoản cú pháp: ALTER USER 'cbuser'@'localhost' PASSWORD EXPIRE Dưới vài ví dụ cho việc mật hết hạn: Bạn thực (bổ sung) sách mà người dùng bắt buộc phải chọn mật lần kết nối đầu tiên: vơ hiệu hóa mật cho tài khoản bạn vừa tạo Nếu bạn áp đặt sách chặt chẽ mật có sẵn bạn vơ hiệu hóa tất mật tồn để yêu cầu người dùng chọn mật đáp ứng yêu cầu nghiêm ngặt Những ảnh hưởng lệnh “Alter user” đến tài khoản Nó làm việc cách thiết lập cột mật bị vô hiệu (password_expired) đến Y cho dòng “mysql.user” thích hợp Để “cheat” vơ hiệu hóa tài khoản khơng ẩn danh lúc, thực điều theo cú pháp (những người dùng ẩn danh thiết lập lại mật họ việc vơ hiệu hóa không thân thiện) UPDATE mysql.user SET password_expired = 'Y' WHERE User ''; FLUSH PRIVILEGES; Ngoài ra, để tác động đến tất tài khoản tránh việc sửa đổi bảng quy tắc (những quy định cơng nhận) cách trực tiếp nên sử dụng thủ tục lưu trữ mà vòng qua tất tài khoản thi hành với người dùng cũ theo cú pháp: CREATE PROCEDURE expire_all_passwords() 10 BEGIN DECLARE done BOOLEAN DEFAULT FALSE; DECLARE account TEXT; DECLARE cur CURSOR FOR SELECT CONCAT(QUOTE(User),'@',QUOTE(Host)) AS account FROM mysql.user WHERE User ''; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; expire_loop: LOOP FETCH cur INTO account; IF done THEN LEAVE expire_loop; END IF; CALL exec_stmt(CONCAT('ALTER USER ',account,' PASSWORD EXPIRE')); END LOOP; CLOSE cur END; Những yêu cầu thủ tục giúp đỡ thường xuyên (tuần hoàn) “exec_stmt”, kịch để tạo nên vòng tuần hồn (chuỗi hoạt động) đặt danh mục xếp phương pháp thực Cách gán cho thân mật - Assigning Yourself a New Password Vấn đề Bạn muốn thay đổi mật cảu bạn Giải pháp Sử dụng lệnh “SET PASSWORD” Thảo luận Để gán cho bạn mật mới, sử dụng lệnh SET PASSWORD hàm PASS WORD (): SET PASSWORD = PASSWORD('my-new-password'); Lệnh SET PASSWORD cho phép mệnh đề FOR giúp bạn định định tài khoản cài mật mới: SET PASSWORD FOR 'user_name'@'host_name' = PASSWORD('my-newpassword'); Cú pháp cuối sở cho DBAs đòi hỏi đặc quyền UPDATE cho sở liệu mysql Nếu lệnh SET PASSWORD thông báo mật hỗn hợp định dạng sai, thử lại sau thiết lập lệnh “old_password” để chọn phương pháp hỗn hợp thích hợp cho việc xác nhận Plug-in kết hợp với tài khoản cảu bạn Công thức cung cấp giá trị 11 Để kiểm tra độ mạnh mật mà bạn xem cần cân nhắc sử dụng hàm VALIDATE_PASSWORD_STRENGTH() Resetting an Expired Password - Đặt lại mật hết hạn Vấn đề Bạn sử dụng mysql mật DBA hết hạn Giải pháp Đặt lại mật Thảo luận Nếu mật admin Mysql hết hạn, MySql cho phép bạn kết nối, khơng thể làm khác: % mysql user=cbuser password Enter password: ****** mysql> SELECT CURRENT_USER(); ERROR 1820 (HY000): You must SET PASSWORD before executing this statement Nếu thấy tin nhắn này, sử dụng lệnh sau để đặt lại mật khẩu, sau làm việc bình thường: mysql> SET PASSWORD = PASSWORD('my-new-password'); Query OK, rows affected (0.00 sec) mysql> SELECT CURRENT_USER(); now you can work again + + | CURRENT_USER() | + + | cbuser@localhost | + + row in set (0.00 sec) Về mặt kỹ thuật, MySQL không yêu cầu mật để thay mật hết hạn, gán cho mật để tránh khỏi lỗi hết hạn Ngoại lệ sách mật trở nên hạn chế mật khơng đáp ứng nó, mật mạnh điều cần thiết Để biết thêm thông tin cách thay đổi mật khẩu, Xem lại mục 23.6 Finding and Fixing Insecure Accounts - Tìm sửa tài khoản khơng an tồn Vấn đề Việc cài đặt MySQL bao gồm tài khoản khơng có mật sử dụng hash method (phương pháp băm mật khẩu) không an toàn Giải pháp Nâng cấp tài khoản để sử dụng hash method tốt Thảo luận 12 An toàn quan trọng MySql cải thiện an toàn tài khoản người dung theo thời gian Thay đổi sớm MySql 4.1, giới thiệu cách băm mật tốt so với cũ Gần sha256_pass MySql 5.6 Để biết thêm thông tin sha256 – password validate_pass, xem lại mục 23.2 23.4 Với tài khoản với mật không bỏ trống bảng user, phương pháp băm: - Phương pháp băm giới thiệu mySql 4.1 tạo 41 kí tự băm bắt đầu kí tự *, - server xác thực kết nối cách dùng plugin mysql_native_password Phương pháp băm nguyên tạo 16 kí tự băm Đây phương pháp băm cũ, sử dụng plugin mysql_old_password để xác thực Để xem khác biệt định dạng băm, tạo giá trị băm: mysql> SET old_passwords = 0; mysql> SELECT OLD_PASSWORD('mypass') AS old, PASSWORD('mypass') AS new\G *************************** row *************************** old: 6f8c114b58f2ce9e new: *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 Ví dụ set old_passwords PASSWORD() sử dụng phương pháp băm pre-4.1 trả kết tương tự OLD_PASSWORD() old_password Quản trị viên nên tránh tạo tài khoản sử dụng cũ, an toàn pre-4.1 Nếu MySql có hash medthod cũ, bạn update lên để sử dụng phương pháp băm 4.1 Ngồi ra, tài khoản khơng nên bỏ trống mật Để xác định nâng cấp tài khoản khơng an tồn, sử dụng thủ tục sau: - Xác định bảng User bạn có chứa tài khoản có bảo mật yếu hay khơng tài khoản gọi yếu có đặc điểm: o Cột plugin mysql_native_password cột password rỗng o Cột plugin rỗng mysql_old_password Sử dụng query để lọc tài khoản có bảo mật yếu: SELECT User, Host, plugin, Password FROM mysql.user WHERE (plugin = 'mysql_native_password' AND Password = '') OR plugin IN ('','mysql_old_password'); - Trước nâng cấp tài khoản yếu, xem xét lại tài khoản điều cần thiết, tạo từ lâu cho project khơng sử dụng nữa, để xóa bỏ: DROP USER 'olduser'@'localhost'; - Nâng cấp tài khoản yếu: o Nếu cột plugin rỗng mysql_old_password, đổi thành mysql_native_password 13 o Nếu cột password rỗng định dạng pre-4.1 hash, dùng mật sử dụng 4.1 hashing Đổi plugin thành mysql_native_password đặt mật mới: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('mypass') WHERE User = 'user2' AND Host = 'localhost'; FLUSH PRIVILEGES; Disabling Use of Accounts with Pre-4.1 Passwords - Vơ hiệu hố Sử dụng Tài khoản với Mật pre-4.1 Vấn đề: Phương pháp băm pre-4.1 gốc an toàn phương pháp khác bạn muốn ngăn chặn tài khoản sử dụng Giải pháp: Đặt biến hệ thống secure_auth để ngăn tài khoản kết nối với máy chủ Để người dùng thân thiện hơn, nâng cấp tài khoản bị ảnh hưởng Thảo luận: Phương thức băm sử dụng trình cắm thêm xác thực mysql_old_password khơng an tồn phương pháp sử dụng mysql_native_password Ngoài ra, mysql_old_password bị phản đối cuối khơng hỗ trợ Để ngăn chặn việc sử dụng chuẩn bị cho ngày mà hỗ trợ cho chấm dứt, thực bước sau: Bước 1: Xác định tài khoản sử dụng mysql_old_password nâng cấp chúng để sử dụng mysql_native_password Hãy thực việc trước để tránh khóa tài khoản bước Bước 2: Khởi động máy chủ với bật chế độ hệ thống secure_auth Đó giá trị de-fault kể từ MySQL 5.6.5, bạn kiểm tra xem cài đặt máy chủ bạn có khác khơng: mysql> SELECT @@secure_auth; + -+ | @@secure_auth | + -+ | 0| + + Nếu giá trị 0, cho phép biến cách bắt đầu máy chủ với giá trị đặt Ví dụ, sử dụng dòng tập tin tùy chọn: [mysqld] 14 secure_auth=1 10 Finding and Removing Anonymous Accounts - Managing User Accounts - Tìm xóa tài khoản ẩn danh Vấn đề: Bạn muốn đảm bảo máy chủ MySQL bạn sử dụng tài khoản liên kết với tên người dùng cụ thể Giải pháp: Xác định loại bỏ tài khoản vô danh Thảo luận: Tài khoản "vô danh" tài khoản có phần người sử dụng rỗng tên tài khoản, chẳng hạn '' @ 'localhost' Một người sử dụng có sản phẩm trống phù hợp với tên mục đích tài khoản nặc danh cho phép biết mật để kết nối từ máy chủ đặt tên (localhost trường hợp này) Đây tiện lợi DBA khơng cần phải thiết lập tài khoản cá nhân cho người dùng riêng biệt Nhưng có ý nghĩa an ninh: - Các tài khoản thường khơng có mật khẩu, cho phép sử dụng chúng mà khơng - có xác thực Bạn liên kết hoạt động sở liệu với người dùng cụ thể (ví dụ cách kiểm tra nhật ký truy vấn máy chủ kiểm tra kết Xử lý TRƯỚC), làm cho khó biết làm Nếu điểm trước thuyết phục bạn tài khoản ẩn danh điều tốt, sử dụng hướng dẫn sau để xác định loại bỏ chúng: - Cột người dùng trống rỗng dòng mysql.user cho tài khoản ẩn danh, bạn xác định chúng sau: mysql> SELECT User, Host FROM mysql.user WHERE User = ''; + + -+ | User | Host | + + -+ | | %.example.com localhost | + + -+ - Đầu SELECT cho thấy hai tài khoản ẩn danh Xóa người sử dụng câu lệnh DROP USER với tên tài khoản tương ứng: mysql> DROP USER ''@'localhost'; mysql> DROP USER ''@'%.example.com'; 11 Modifying “Any Host” and “Many Host” Accounts - Sửa đổi Tài khoản "Bất kỳ Máy chủ" "Nhiều máy chủ" Vấn đề 15 Bạn muốn chắn tài khoản MySQL không sử dụng từ máy rộng Giải pháp Tìm sửa tài khoản có chứa % _ phần lưu trữ Thảo Luận Phần lưu trữ tên tài khoản MySQL chứa ký tự mẫu SQL % _ Những tên phù hợp với nổ lực kết nối khách hàng từ máy chủ phù hợp với mẫu Ví dụ, tài khoản 'user1'@'%' cho phép user1 kết nối từ máy chủ nào, 'user2'@'%.example.com' cho phép user2 kết nối từ máy chủ miền example.com Các mẫu phần lưu trữ tên tài khoản cung cấp tiện lợi mà cho phép DBA tạo tài khoản cho phép kết nối từ nhiều máy chủ Nó làm tăng rủi ro bảo mật cách tăng số lượng máy chủ mà kẻ công cố gắng xâm nhập vào Nếu bạn cho mối nguy hại, bạn xác định tài khoản loại bỏ chúng thay đổi phần lưu trữ cụ thể Có vài cách để tìm tài khoản với ký tự % _ phần lưu trữ Có cách: WHERE Host LIKE '%\%%' OR Host LIKE '%\_%'; WHERE Host REGEXP '[%_]'; Biểu thức LIKE phức tạp phải tìm ký tự mẫu cách riêng biệt ,hoặc để tìm kiếm phiên chữ Biểu thức REGEXP khơng u cầu ký tự khơng đặc biệt biểu thức thông thường, lớp ký tự cho phép hai tìm với mẫu đơn Vì sử dụng biểu thức sau: - Xác định tài khoản máy chủ lưu trữ mẫu bảng mysql.user sau: mysql> SELECT User, Host FROM mysql.user WHERE Host REGEXP '[%_]'; + -+ + | User | Host | + -+ + | user1 | % | | user2 | %.example.com | | user3 | _.example.com | + -+ + - Để xóa tài khoản xác định, sử dụng DROP USER: mysql> DROP USER 'user1'@'%'; mysql> DROP USER 'user3'@'_.example.com'; Ngoài ra, đổi tên tài khoản để làm cho phần lưu trữ cụ thể hơn: 16 mysql> RENAME USER 'user2'@'%.example.com' TO 'user2'@'host17.example.com'; 17 ... sử dụng mysql_ native_password thay - sha256_password xác thực cách sử dụng giá trị băm mật SHA-256, mật mã an toàn băm tạo mysql_ native_pass từ Plug-in có sẵn MySQL 5.6.6 Nó cung cấp bảo mật ngồi... Expiring Passwords - Mật hết hạn Vấn đề Muốn người dùng chọn mật MySQL Giải pháp Có thơng báo thay đổi dành cho người dùng việc mật hết hạn Thảo luận MySQL 5.6.7 cập nhật cung cấp thông báo dành cho... (0.00 sec) Về mặt kỹ thuật, MySQL không yêu cầu mật để thay mật hết hạn, gán cho mật để tránh khỏi lỗi hết hạn Ngoại lệ sách mật trở nên hạn chế mật khơng đáp ứng nó, mật mạnh điều cần thiết Để

Ngày đăng: 14/12/2017, 09:41

Xem thêm:

TỪ KHÓA LIÊN QUAN

w