Kiểm toán bảo mật MySQL 8.0: Nhận diện tài khoản có đặc quyền vượt mức

Trong quản trị cơ sở dữ liệu, việc bảo mật không chỉ dừng lại ở việc thiết lập mật khẩu mạnh. Áp dụng Nguyên tắc đặc quyền tối thiểu (Principle of Least Privilege) là yêu cầu bắt buộc để giảm thiểu bề mặt tấn công. MySQL 8.0 cung cấp hệ thống quản lý phân quyền chi tiết hơn, cho phép quản trị viên kiểm soát chặt chẽ các đặc quyền. Bài viết này sẽ hướng dẫn cách sử dụng các truy vấn SQL để phát hiện hai loại tài khoản có nguy cơ cao: những tài khoản sở hữu quyền GRANT OPTION và những tài khoản được gán các vai trò quản trị cấp cao (như rds_superuser_role).

1. Phát hiện tài khoản sở hữu quyền GRANT OPTION

Quyền GRANT OPTION cho phép một tài khoản không chỉ thực thi các thao tác được cấp mà còn có khả năng cấp lại những quyền đó cho các tài khoản khác. Nếu một tài khoản ứng dụng hoặc nhà phát triển thông thường vô tình có quyền này, họ có thể tạo ra các bản sao đặc quyền, dẫn đến việc mất kiểm soát hệ thống phân quyền và tạo ra các lỗ hổng bảo mật nghiêm trọng.

Thông tin về đặc quyền toàn cục được lưu trữ trong bảng hệ thống mysql.user. Để tìm các tài khoản có khả năng cấp quyền, chúng ta có thể truy vấn bảng này với một cấu trúc lọc, đồng thời loại trừ các tài khoản hệ thống mặc định để kết quả trả về tập trung vào các tài khoản thực tế.

-- Truy vấn tìm các tài khoản có quyền GRANT OPTION, loại trừ các user hệ thống
SELECT 
    CONCAT('''', user_name, '''@''', host_name, '''') AS account_identifier,
    grant_capability AS has_grant_option
FROM (
    SELECT 
        User AS user_name, 
        Host AS host_name, 
        Grant_priv AS grant_capability
    FROM mysql.user
    WHERE User NOT IN ('mysql.sys', 'mysql.session', 'mysql.infoschema', 'root')
) AS filtered_users
WHERE grant_capability = 'Y';

Kết quả trả về sẽ liệt kê các tài khoản có khả năng phân phối đặc quyền dưới dạng định danh chuẩn 'user'@'host'. Đối với các tài khoản này, quản trị viên cần xem xét lại tính hợp lý. Quyền GRANT OPTION chỉ nên được giới hạn cho các tài khoản DBA chuyên dụng và tuyệt đối không cấp cho các tài khoản ứng dụng (application users). Việc tích hợp truy vấn này vào các hệ thống giám sát tự động sẽ giúp cảnh báo sớm các thay đổi phân quyền bất thường.

2. Kiểm soát tài khoản được gán vai trò quản trị cấp cao

MySQL 8.0 đã giới thiệu khái niệm Role (vai trò), cho phép gom nhóm các đặc quyền để quản lý tập trung. Tuy nhiên, việc sử dụng các vai trò có đặc quyền quá lớn, chẳng hạn như rds_superuser_role (thường thấy trên các dịch vụ đám mây như AWS RDS), đòi hỏi sự giám sát nghiêm ngặt. Những vai trò này thường đóng gói hàng loạt quyền quản trị (như SUPER, RELOAD, PROCESS), biến người sở hữu thành "siêu quản trị viên" của instance.

Trước khi kiểm toán, bạn có thể sử dụng lệnh SHOW GRANTS FOR 'rds_superuser_role'@'%'; để nắm rõ danh sách các đặc quyền đi kèm. Để biết những tài khoản nào đang được gán vai trò này, chúng ta truy vấn bảng mysql.role_edges, nơi lưu trữ mối quan hệ ánh xạ giữa người dùng và vai trò.

-- Kiểm tra các tài khoản đang được gán vai trò siêu quản trị hoặc quản trị viên
SELECT 
    grantee_account AS assigned_user,
    grantee_host AS assigned_host,
    role_name AS elevated_role
FROM (
    SELECT 
        TO_USER AS grantee_account,
        TO_HOST AS grantee_host,
        FROM_USER AS role_name
    FROM mysql.role_edges
) AS role_mapping
WHERE role_name IN ('rds_superuser_role', 'admin_role', 'dba_role');

Kết quả sẽ hiển thị danh sách các tài khoản đang nắm giữ vai trò đặc biệt. Thay vì cấp các vai trò "siêu quyền" này cho người dùng cuối hoặc ứng dụng, phương pháp tối ưu là tạo ra các vai trò tùy chỉnh có độ chi tiết cao hơn dựa trên nhu cầu thực tế. Ví dụ, thiết lập readonly_role cho các công cụ báo cáo, hoặc backup_operator_role chỉ dành riêng cho các tiến trình sao lưu. Chỉ những tài khoản quản trị cốt lõi mới nên xuất hiện trong danh sách kết quả của truy vấn kiểm toán này.

Thẻ: MySQL 8.0 Bảo mật cơ sở dữ liệu Access Control GRANT OPTION Role Management

Đăng vào ngày 9 tháng 8 lúc 00:50