Kiểm soát truy cập dựa trên vai trò của MySQL

Trong hệ thống quản lý cơ sở dữ liệu (DBMS), kiểm soát truy cập dựa trên vai trò (RBAC), là một hạn chế đối với tài nguyên cơ sở dữ liệu dựa trên một tập hợp các nhóm đặc quyền được xác định trước và đã trở thành một trong những phương pháp chính để kiểm soát truy cập nâng cao. Vai trò cơ sở dữ liệu có thể được tạo và loại bỏ, cũng như có các đặc quyền được cấp và thu hồi từ chúng. Vai trò có thể được cấp và thu hồi từ tài khoản người dùng cá nhân. Có thể chọn các vai trò hoạt động hiện hành cho một tài khoản từ những vai trò được cấp cho tài khoản đó và thay đổi trong các phiên của tài khoản đó

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];
0

Vai 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];
1

Vì 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];
3

Khi 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];
4

Và 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];
5

Thủ 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

Kiểm soát truy cập dựa trên vai trò của MySQL

Vì Michael thuộc về vai trò app_deleloper, chúng tôi cũng có thể đặt đặc quyền thấp nhất làm vai trò mặc định để bảo vệ anh ấy khỏi việc vô tình sửa đổi dữ liệu

MariaDB> CREATE USER [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];
7

Vai 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];
8

Tạ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];
9

Bằ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;
0

Từ 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;
1

Suy 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

Kiểm soát truy cập dựa trên vai trò trong SQL là gì?

Kiểm soát truy cập dựa trên vai trò (RBAC) là phương pháp hạn chế quyền truy cập mạng dựa trên vai trò của từng người dùng trong doanh nghiệp . RBAC đảm bảo nhân viên chỉ truy cập thông tin họ cần để thực hiện công việc của họ và ngăn họ truy cập thông tin không liên quan đến họ.

Cơ sở dữ liệu dựa trên vai trò trong MySQL là gì?

Vai trò MySQL là một tập hợp các đặc quyền được đặt tên . Giống như tài khoản người dùng, các vai trò có thể được cấp và thu hồi các đặc quyền đối với họ. Tài khoản người dùng có thể được cấp vai trò, cấp cho tài khoản các đặc quyền được liên kết với từng vai trò.

Bảo mật truy cập MySQL được kiểm soát như thế nào?

MySQL sử dụng bảo mật dựa trên Danh sách kiểm soát truy cập (ACL) cho tất cả các kết nối, truy vấn và các hoạt động khác mà người dùng có thể cố gắng thực hiện. Ngoài ra còn có một số hỗ trợ cho các kết nối được mã hóa SSL giữa máy khách và máy chủ MySQL.

Điều khiển truy cập MySQL là gì?

Kiểm soát truy cập MySQL bao gồm hai giai đoạn khi bạn chạy chương trình máy khách kết nối với máy chủ. Giai đoạn 1. Máy chủ chấp nhận hoặc từ chối kết nối dựa trên danh tính của bạn và liệu bạn có thể xác minh danh tính của mình bằng cách cung cấp đúng mật khẩu hay không .