Trong bài đăng trên blog này, chúng tôi sẽ giới thiệu một số mẹo và thủ thuật về cách sử dụng vai trò cơ sở dữ liệu để quản lý đặc quyền của người dùng và làm cơ chế kiểm soát truy cập nâng cao để truy cập cơ sở dữ liệu của chúng tôi. Nếu bạn muốn tìm hiểu về các khái niệm cơ bản về vai trò trong MySQL và MariaDB, hãy xem bài đăng trên blog này, Quản lý người dùng cơ sở dữ liệu. Quản lý vai trò cho MariaDB.
Vai trò của MySQL so với MariaDB
MySQL và MariaDB sử dụng hai cơ chế vai trò khác nhau. Trong Mysql 8. 0 trở lên, vai trò tương tự như người dùng khác, với tên người dùng và máy chủ lưu trữ [‘role1’@’localhost’]. Vâng, đó là tên vai trò, thực tế tương tự như định nghĩa máy chủ-người dùng tiêu chuẩn. MySQL lưu trữ định nghĩa vai trò giống như lưu trữ đặc quyền của người dùng trong mysql. bảng hệ thống người dùng
MariaDB đã giới thiệu vai trò và quyền truy cập trong MariaDB phiên bản 10. 0. 5 [tháng 11 năm 2013], 8 năm trước khi MySQL đưa tính năng này vào MySQL8. 0. Nó tuân theo quản lý vai trò tương tự trong hệ thống cơ sở dữ liệu tuân thủ SQL, mạnh mẽ hơn và dễ hiểu hơn nhiều. MariaDB lưu trữ định nghĩa trong mysql. bảng hệ thống người dùng được gắn cờ với một cột mới được thêm vào có tên là is_role. MySQL lưu trữ vai trò theo cách khác, sử dụng kết hợp người dùng-máy chủ tương tự như quản lý người dùng MySQL tiêu chuẩn
Phải nói rằng, chuyển đổi vai trò giữa hai DBMS này hiện không tương thích với nhau
Vai trò quản trị và sao lưu MariaDB
MySQL có các đặc quyền động, cung cấp một tập hợp các đặc quyền cho các tác vụ quản trị chung. Đối với MariaDB, chúng ta có thể thiết lập những thứ tương tự bằng cách sử dụng các vai trò, đặc biệt là đối với các đặc quyền sao lưu và khôi phục. Đối với Sao lưu MariaDB, vì đây là bản sao lưu vật lý và yêu cầu một nhóm đặc quyền khác, chúng tôi có thể tạo một vai trò cụ thể để gán vai trò đó cho người dùng cơ sở dữ liệu khác
Đầu tiên, tạo một vai trò và gán nó với các đặc quyền phù hợp
MariaDB> CREATE ROLE mariadb_backup;
MariaDB> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO mariadb_backup;
Sau đó, chúng tôi có thể tạo người dùng dự phòng, cấp cho nó vai trò mariadb_backup và gán vai trò mặc định
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
Đối với mysqldump hoặc mariadb-dump, các đặc quyền tối thiểu để tạo bản sao lưu có thể được đặt như bên dưới
MariaDB> CREATE ROLE mysqldump_backup;
MariaDB> GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES ON *.* TO mysqldump_backup;
Sau đó, chúng tôi có thể tạo người dùng dự phòng, cấp cho nó vai trò mysqldump_backup và gán vai trò mặc định
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'p4ss182MMM';
MariaDB> GRANT mysqldump_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mysqldump_backup FOR [email protected];
Để khôi phục, nó thường yêu cầu một tập hợp các đặc quyền khác, đó là một chút
MariaDB> CREATE ROLE mysqldump_restore;
MariaDB> GRANT SUPER, ALTER, INSERT, CREATE, DROP, LOCK TABLES, REFERENCES, SELECT, CREATE ROUTINE, TRIGGER ON *.* TO mysqldump_restore;
Sau đó, chúng tôi có thể tạo người dùng khôi phục, cấp cho nó vai trò mysqldump_restore và gán vai trò mặc định
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'p4ss182MMM';
MariaDB> GRANT mysqldump_restore TO [email protected];
MariaDB> SET DEFAULT ROLE mysqldump_restore FOR [email protected];
Bằng cách sử dụng thủ thuật này, chúng tôi có thể đơn giản hóa quy trình tạo người dùng quản trị bằng cách chỉ định vai trò với các đặc quyền được xác định trước. Như vậy, câu lệnh GRANT của chúng ta có thể rút gọn và dễ hiểu hơn
Tạo vai trò trên vai trò trong MariaDB
Chúng tôi có thể tạo một vai trò khác trên vai trò hiện có tương tự như thành viên nhóm lồng nhau với quyền kiểm soát chi tiết hơn đối với các đặc quyền. Ví dụ: chúng ta có thể tạo 4 vai trò sau
MariaDB> CREATE ROLE app_developer, app_reader, app_writer, app_structure;
Cấp đặc quyền quản lý cấu trúc lược đồ cho vai trò app_structure
MariaDB> GRANT CREATE, ALTER, DROP, CREATE VIEW, CREATE ROUTINE, INDEX, TRIGGER, REFERENCES ON app.* to app_structure;
Cấp đặc quyền cho Ngôn ngữ thao tác dữ liệu [DML] cho vai trò app_writer
________số 8_______Cấp đặc quyền cho Ngôn ngữ truy vấn dữ liệu [DQL] cho vai trò app_reader
MariaDB> GRANT SELECT, LOCK TABLES, SHOW VIEW app.* to app_reader;
Và cuối cùng, chúng ta có thể gán tất cả các vai trò trên cho app_developer, vai trò này sẽ có toàn quyền kiểm soát lược đồ
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
0Vai trò đã sẵn sàng và bây giờ chúng ta có thể tạo người dùng cơ sở dữ liệu với vai trò app_developer
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
1Vì Michael hiện thuộc về vai trò app_deleloper và app_reader, nên chúng tôi cũng có thể chỉ định các đặc quyền thấp nhất làm vai trò mặc định để bảo vệ anh ấy khỏi sai lầm không mong muốn của con người
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
2Điểm hay của việc sử dụng một vai trò là bạn có thể ẩn các đặc quyền thực sự đối với người dùng cơ sở dữ liệu. Hãy xem xét người dùng cơ sở dữ liệu sau vừa đăng nhập
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
3Khi cố gắng truy xuất các đặc quyền bằng SHOW GRANTS, Michael sẽ thấy
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
4Và khi Michael đang cố gắng tìm kiếm các đặc quyền của app_developer, anh ấy sẽ thấy lỗi này
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
5Thủ thuật này cho phép các DBA chỉ hiển thị nhóm hợp lý nơi người dùng thuộc về và không có gì khác. Chúng ta có thể giảm vectơ tấn công từ khía cạnh này vì người dùng sẽ không biết về các đặc quyền thực tế được gán cho họ
Thực thi vai trò mặc định trong MariaDB
Bằng cách thực thi vai trò mặc định, người dùng cơ sở dữ liệu có thể được bảo vệ ở lớp đầu tiên trước những lỗi vô tình của con người. Ví dụ: hãy xem xét người dùng Michael đã được cấp vai trò app_developer, trong đó vai trò app_developer là tập hợp lớn nhất của các vai trò app_strucutre, app_writer và app_reader, như minh họa bên dưới
[email protected] IDENTIFIED BY 'passw0rdMMM'; MariaDB> GRANT mariadb_backup TO [email protected]; MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];6
Đối với người dùng “michael”, anh ấy sẽ thấy thông tin sau khi đăng nhập
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
7Vai trò mặc định của nó là app_reader, đây là đặc quyền chỉ đọc đối với cơ sở dữ liệu có tên là “ứng dụng”. Người dùng hiện tại có khả năng chuyển đổi giữa bất kỳ vai trò áp dụng nào bằng cách sử dụng tính năng ĐẶT VAI TRÒ . Đối với Michael, anh ấy có thể chuyển sang vai trò khác bằng cách sử dụng câu lệnh sau.
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
8Tại thời điểm này, Michael sẽ có thể ghi vào cơ sở dữ liệu 'ứng dụng' vì app_developer là siêu bộ của app_writer và app_structure. Để kiểm tra các vai trò khả dụng cho người dùng hiện tại, chúng ta có thể truy vấn information_schema. bảng application_roles .
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'passw0rdMMM';
MariaDB> GRANT mariadb_backup TO [email protected];
MariaDB> SET DEFAULT ROLE mariadb_backup FOR [email protected];
9Bằng cách này, chúng tôi sắp đặt vai trò chính cho người dùng và vai trò chính có thể là đặc quyền thấp nhất có thể đối với một người dùng cụ thể. Người dùng phải đồng ý về vai trò tích cực của mình, bằng cách chuyển sang vai trò đặc quyền khác trước khi thực hiện bất kỳ hoạt động rủi ro nào đối với máy chủ cơ sở dữ liệu
Ánh xạ vai trò trong MariaDB
MariaDB cung cấp một bảng ánh xạ vai trò có tên là mysql. role_mapping . Ánh xạ cho phép chúng tôi dễ dàng hiểu được mối tương quan giữa người dùng và vai trò của họ cũng như cách vai trò được ánh xạ tới vai trò khác.
MariaDB> CREATE ROLE mysqldump_backup;
MariaDB> GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES ON *.* TO mysqldump_backup;
0Từ kết quả trên, chúng ta có thể biết rằng Người dùng không có Máy chủ về cơ bản là vai trò hơn vai trò và người dùng quản trị [ Admin_option = Y] are also being assigned to the created roles automatically. To get the list of created roles, we can query the MySQL user table:
MariaDB> CREATE ROLE mysqldump_backup;
MariaDB> GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES ON *.* TO mysqldump_backup;
1Suy nghĩ cuối cùng
Việc sử dụng các vai trò có thể cải thiện tính bảo mật của cơ sở dữ liệu bằng cách cung cấp một lớp bảo vệ bổ sung chống lại việc người dùng cơ sở dữ liệu vô tình sửa đổi dữ liệu. Hơn nữa, nó đơn giản hóa các hoạt động quản lý và bảo trì đặc quyền cho các tổ chức có nhiều người dùng cơ sở dữ liệu