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

Sử dụng vai trò mới trong MySQL 8

Trong bài viết này, chúng ta sẽ nói về tính năng mới trong hệ thống đặc quyền liên quan đến MySQL 8, đó là Vai trò. Vì vậy, hãy nói về vai trò, bài viết này hoàn toàn dành cho vai trò.

Những người dùng khác có thể có các đặc quyền phức tạp, một ví dụ phổ biến cho điều này là người dùng được sử dụng để báo cáo, người dùng này không cần ghi bất kỳ dữ liệu nào, nhưng cũng có khả năng không cần đọc tất cả dữ liệu. Rất có thể nó chỉ có thể được sử dụng cho một số bảng hoặc cột cụ thể hoặc nó chỉ có thể có quyền truy cập đã chọn vào một tập hợp các chế độ xem cũng sẽ là một chế độ xem cụ thể.

Các đặc quyền này có thể cộng lại nhanh chóng và kết thúc trong các định nghĩa người dùng rất dài, chúng tôi sẽ không sử dụng một định nghĩa và nhiều khoản trợ cấp đang tạo ra nhiều sai lầm hơn. Trong MySQL 8, các bộ đặc quyền này có thể được định nghĩa là các Vai trò và các Vai trò có thể được cấp cho người dùng thay vì các đặc quyền MySQL cơ bản. Vai trò là một tập hợp các đặc quyền mà chúng tôi cấp cho người dùng.

Giống như người dùng mới được tạo bằng lệnh tạo người dùng mà chúng tôi sử dụng để tạo vai trò như được đề cập bên dưới;

CREATE ROLE 'reportrole';

Bạn có thể tạo nhiều vai trò giống như truy vấn dưới đây trong một lần.

CREATE ROLE 'app_ro', 'app_w', 'app_dev';

Vai trò mới được tạo bằng lệnh tạo vai trò sẽ không có đặc quyền liên quan đến vai trò đó, có thể cấp quyền cho vai trò này như người dùng bình thường.

Trong ví dụ dưới đây, chúng tôi cấp đặc quyền chọn lọc trên tất cả các bảng trong cơ sở dữ liệu COMPANY để thực hiện vai trò báo cáo mà chúng tôi đã tạo ở trên.

GRANT SELECT ON company.* to repotrole;

Dấu hoa thị (*) đại diện cho tất cả các bảng bên trong cơ sở dữ liệu công ty.

Vai trò có thể được cấp cho người dùng MySQL, trong ví dụ bên dưới, chúng tôi đang tạo ‘company_ro’ tại người dùng localhost.

CREATE USER IF NOT EXISTS 'company_ro'@'localhost' IDENTIFIED WITH mysql_native_password BY 'company_pass' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;

Hãy nhớ rằng người dùng không chỉ là tên người dùng mà còn là người dùng của họ tại máy chủ lưu trữ trong MySQL và sau đó vai trò của kho tài nguyên có thể được cấp cho nó với kho tài trợ cho người dùng như được hiển thị bên dưới.

GRANT 'repotrole' to 'company_ro'@'localhost';

Chức năng vai trò hiện tại của MySQL giúp xác định vai trò của người dùng hiện tại.

mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| NONE           |
+----------------+

Các đặc quyền của vai trò xếp chồng lên nhau có nghĩa là người dùng sẽ có các đặc quyền được mô tả bởi Liên minh các đặc quyền cơ sở và các vai trò của nó có. Điều rất quan trọng là nếu người dùng được cấp vai trò thì nó không được kích hoạt theo mặc định. chúng ta sẽ thấy điều này sau ở cuối phần này.

Xác định vai trò bắt buộc

Vai trò bắt buộc là những vai trò sẽ được liên kết bởi tất cả người dùng theo mặc định được kiểm soát bởi biến bắt buộc.

SET PERSIST started_roles =‘role1, role2 ′;

mysql> SET PERSIST started_roles =’dbt3_read23’;

Các vai trò bắt buộc, như vai trò được cấp rõ ràng, sẽ không có hiệu lực cho đến khi được kích hoạt, bạn sẽ thấy cách thực hiện vai trò tích cực sau trong bài đăng này.

Thực hành Vai trò

Thực tế hãy làm điều này, chúng tôi tạo một vai trò và gán vai trò đó cho nhiều người dùng, chúng tôi sẽ thêm các đặc quyền trên tất cả các bảng trên cơ sở dữ liệu của công ty và chúng tôi sẽ thêm một đặc quyền chọn lọc khác trên bảng hệ thống như được hiển thị bên dưới.

mysql> create role 'repotrole';

Vì vậy, hãy cấp các đặc quyền cho người dùng báo cáo.

mysql> grant select on company.* to 'repotrole';

mysql> grant select on sys.version to 'repotrole';

Hãy tạo cho người dùng, user1 tại localhost và user2 tại localhost với các mật khẩu khác nhau

mysql> create user 'user1'@'localhost' identified by 'foo';

mysql> create user 'user2'@'localhost' identified by 'bar';

mysql> grant 'repotrole' to 'user1'@'localhost';

mysql> grant 'repotrole' to 'user2'@'localhost';

Chúng được tạo, chỉ định vai trò thay thế cho chúng và sau đó kiểm tra với các khoản tài trợ cho chương trình xem chúng có vai trò thay thế hay không.

mysql> show grants for 'user1'@'localhost';
+----------------------------------------------+
| Grants for [email protected]                   |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `user1`@`localhost`    |
| GRANT `repotrole`@`%` TO `user1`@`localhost` |
+----------------------------------------------+

mysql> show grants for 'user2'@'localhost';
+----------------------------------------------+
| Grants for [email protected]                   |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `user2`@`localhost`    |
| GRANT `repotrole`@`%` TO `user2`@`localhost` |
+----------------------------------------------+

Họ làm như vậy thay vì phải viết ra cả hai đặc quyền cho cả hai người dùng, chúng tôi vừa tạo vai trò thay thế và vai trò đó đã thêm cả hai đặc quyền cho cả hai người dùng mới mà chúng tôi đã tạo.

Kiểm tra người dùng bằng pt-show-grants.

Người dùng1

[[email protected] ~]# pt-show-grants | grep user1

-- Grants for 'dbt3_user1'@'%'
CREATE USER IF NOT EXISTS 'dbt3_user1'@'%';
ALTER USER 'dbt3_user1'@'%' IDENTIFIED WITH 'mysql_native_password' AS 
'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' REQUIRE NONE PASSWORD EXPIRE 
DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL 
DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `dbt3_user1`@`%`;
GRANT `dbt3_reader`@`%` TO `dbt3_user1`@`%`;
-- Grants for 'user1'@'localhost'
CREATE USER IF NOT EXISTS 'user1'@'localhost';
ALTER USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS 
'*F3A2A51A9B0F2BE2468926B4132313728C250DBF' REQUIRE NONE PASSWORD EXPIRE 
DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT 
PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `user1`@`localhost`;
GRANT `repotrole`@`%` TO `user1`@`localhost`;

Người dùng2

[[email protected] ~]# pt-show-grants | grep user2

-- Grants for 'dbt3_user2'@'%'
CREATE USER IF NOT EXISTS 'dbt3_user2'@'%';
ALTER USER 'dbt3_user2'@'%' IDENTIFIED WITH 'mysql_native_password' AS 
'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' DEFAULT ROLE `dbt3_read23`@`%` REQUIRE 
NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE 
INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `dbt3_user2`@`%`;
-- Grants for 'user2'@'localhost'
CREATE USER IF NOT EXISTS 'user2'@'localhost';
ALTER USER 'user2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS 
'*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB' REQUIRE NONE PASSWORD EXPIRE 
DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL 
DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `user2`@`localhost`;
GRANT `repotrole`@`%` TO `user2`@`localhost`;

Vì vậy, pt-show-grants thể hiện vai trò thay thế cho cả hai người dùng.

Nếu bạn muốn tìm hiểu cách sử dụng pt-show-grants, hãy liên kết dưới đây

Cài đặt và sử dụng Bộ công cụ Percona trên Centos 7

Hãy bắt đầu lại ứng dụng khách MySQL và lần này cấp vai trò thay thế cho người dùng comp1.

mysql> grant 'repotrole' to 'comp1'@'localhost';

Hãy thoát khỏi máy khách MySQL và người dùng Logan comp1, chỉ cần chỉ định tên người dùng và mật khẩu trên dòng lệnh.

Chỉ định mật khẩu trên dòng lệnh trên các hệ thống sản xuất không phải là một ý kiến ​​hay vì nó sẽ được ghi vào lịch sử. Hãy kiểm tra các quyền với các khoản tài trợ cho chương trình.

mysql> show grants;
+----------------------------------------------------------------+
| Grants for [email protected]                                     |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `comp1`@`localhost`                      |
| GRANT `dbt3_read23`@`%`,`repotrole`@`%` TO `comp1`@`localhost` |

Vì vậy, người dùng có vai trò repotrole nhưng các đặc quyền của nó vẫn chưa được kích hoạt. Bạn có thể thấy vai trò ‘dbt3_read23’ đã ở đó vì vai trò này đã được đặt thành PERSIST started_roles , khi bạn tạo người dùng mới, vai trò này sẽ được chỉ định tự động.

Kích hoạt vai trò

Chúng tôi có thể sử dụng kho vai trò đã đặt để kích hoạt vai trò và sau đó chúng tôi kiểm tra các khoản tài trợ cho chương trình.

mysql> set role 'repotrole';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants;
+----------------------------------------------------------------+
| Grants for [email protected]                                     |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `comp1`@`localhost`                      |
| GRANT SELECT ON `company`.* TO `comp1`@`localhost`             |
| GRANT SELECT ON `sys`.`version` TO `comp1`@`localhost`         |
| GRANT `dbt3_read23`@`%`,`repotrole`@`%` TO `comp1`@`localhost` |
+----------------------------------------------------------------+

Bạn có thể thấy rằng người dùng comp1 đã có đặc quyền đối với tất cả các bảng của công ty, đây là lý do tại sao chúng tôi cấp vai trò cho người dùng này cho bài tập này nhưng vai trò tổng kho sẽ thêm đặc quyền mới vào bảng phiên bản hệ thống.

Chúng tôi có thể đặt trở lại vai trò mặc định và kiểm tra lại các đặc quyền.

mysql> set role none;
Query OK, 0 rows affected (0.00 sec)

mysql> show grants;
+----------------------------------------------------------------+
| Grants for [email protected]                                     |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `comp1`@`localhost`                      |
| GRANT `dbt3_read23`@`%`,`repotrole`@`%` TO `comp1`@`localhost` |
+----------------------------------------------------------------+

This time the user kept the dbt3_read23 role because it had it as base privileges but it won't have the privilege to sys.version table that version anymore because that came from the role.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm hiểu cách nhập dữ liệu Excel vào cơ sở dữ liệu MySQL

  2. CHÈN với CHỌN

  3. Cài đặt WordPress 5 trên ZEIT ngay bây giờ với MySQL Hosting

  4. Khi nào đóng con trỏ bằng MySQLdb

  5. Cách chia DATE và TIME khỏi DATETIME trong MySQL