PostgreSQL

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges)

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges)
Được viết bởi Minh Hoàng

Series chia sẻ về PostgreSQL – Cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới.

Bài viết này sẽ tìm hiểu về Group Roles của PostgreSQL và cách sử dụng chúng để quản lý các đặc quyền (privileges) hiệu quả hơn.

1. Giới thiệu về group roles của PostgreSQL

1. Giới thiệu về group roles của PostgreSQL

Việc quản lý roles như một group sẽ dễ dàng hơn để bạn có thể cấp hoặc thu hồi các đặc quyền từ toàn bộ nhóm thay vì thực hiện vai trò đó trên một vai trò riêng lẻ.

Nghãi là, bạn sẽ tạo một role đại diện cho một group – tức là role này được xem như là một group roles và sau đó cấp quyền thành viên (grants membership) trong group role cho các role thành viên (individual roles).

Theo quy ước, group roles không có đặc quyền LOGIN. Điều đó có nghĩa là bạn sẽ không thể sử dụng role có vai trò là một group roles để đăng nhập vào PostgreSQL.

Để tạo group roles, bạn sử dụng câu lệnh CREATE ROLE như sau:

CREATE ROLE role_name_group;

Ví dụ sau đây tạo ra một group rolescó tên là sales:

CREATE ROLE sales;

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges) - Hình 1

Để thêm một role vào group roles, bạn sử dụng câu lệnh GRANT

GRANT role_name_group TO role_name [, ...] [ WITH ADMIN OPTION ]

Ví dụ sau đây thêm role minhhoangblog vào group roles sales:

GRANT sales TO minhhoangblog;

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges) - Hình 2

Để xóa một user role khỏi group roles, bạn sử dụng câu lệnh REVOKE

REVOKE role_name_group FROM role_name;

Ví dụ sau đây xóa role minhhoangblog khỏi group roles sales:

REVOKE sales FROM minhhoangblog;

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges) - Hình 3

※Lưu ý rằng PostgreSQL không cho phép bạn có các vòng tròn thành viên, tức là trong group roles có một role là thành viên của role khác và ngược lại.

2. Ví dụ về Role Membership của PostgreSQL

2. Ví dụ về Role Membership của PostgreSQL

Một role có thể sử dụng các đặc quyền của group roles bằng 1 trong 2 cách sau:

  1. Một role có thuộc tính INHERIT sẽ tự động có các đặc quyền của group roles mà nó là thành viên, bao gồm mọi đặc quyền được kế thừa bởi role đó.
  2. Một role có thể sử dụng câu lệnh SET ROLE để tạm thời trở thành một group role. Khi đó role này sẽ có các đặc quyền của group role so với role đăng nhập ban đầu của nó. Ngoài ra, các đối tượng được tạo bởi role được sở hữu bởi group role, chứ không phải role lúc đăng nhập.
Bước 1/3:

① Tạo một database mới có tên là company:

create database company;

② Tạo bảng contacts:

create table contacts(
   id int generated always as identity primary key,
   name varchar(255) not null,
   phone varchar(255) not null
);

③ Tạo bảng forecasts:

create table forecasts(
    year int, 
    month int, 
    amount numeric
);

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges) - Hình 4

Bước 2/3:

① Tạo một role có tên là hihongo có thể login bằng password 12345678 và kế thừa tất cả các đặc quyền của group roles mà nó là thành viên:

create role hihongo inherit login password '12345678';

② Cấp quyền (Grant) SELECT trên bảng forecasts cho role hihongo:

grant select on forecasts to hihongo;

③ Sử dụng lệnh \z để kiểm tra bảng cấp quyền (grant table):

\z

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges) - Hình 5

④ Tạo group role marketing:

create role marketing noinherit;

⑤ Tạo group role planning:

create role planning noinherit;

⑥ Cấp tất cả các đặc quyền (Grant all privileges) trên bảng contacts cho group role marketing:

grant all on contacts to marketing;

⑦ Cấp tất cả các đặc quyền (Grant all privileges) trên bảng forecasts cho group role planning:

grant all on forecasts to planning;

⑧ Thêm hihongo là một thành viên của group role marketing:

grant marketing to hihongo;

⑨ Thêm planning là một thành viên của group role marketing:

grant marketing to planning;

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges) - Hình 6

Bước 3/3:

① Nếu bạn kết nối với PostgreSQL bằng role hihongo, bạn sẽ có các đặc quyền được cấp trực tiếp cho role hihongo, cộng với bất kỳ đặc quyền nào được cấp cho group role marketinghihongo thừa hưởng các đặc quyền của marketing:

psql -U hihongo -d company

Group Roles và cách sử dụng để quản lý hiệu quả các đặc quyền (privileges) - Hình 7

③ Role hihongo có thể select dữ liệu từ bảng forecasts:

company=> select * from forecasts;

④ chèn một hàng vào bảng contacts:

company=> insert into contacts(name, phone) values('Jone Doe','408-102-3459');

⑤ Tuy nhiên, hihongo không thể chèn một hàng vào bảng forecasts:

company=> insert into forecasts(year, month, amount) values(2020,1,1000);
ERROR:  permission denied for table forecasts

⑥ Sau khi thực hiện câu lệnh SET ROLE sau:

company=> set role planning;

Lúc này role hihongo sẽ có các đặc quyền đã được cấp cho group role planning, chứ không phải các đặc quyền được cấp trực tiếp cho role hihongo hoặc gián tiếp cho group role marketing.

⑦ Bây giờ, role hihongo đã có thể chèn một hàng vào bảng forecasts:

company=> insert into forecasts(year, month, amount) values(2020,1,1000);

⑧ Nếu hihongo cố gắng select data từ bảng contacts, nó sẽ thất bại vì group role planning không có đặc quyền trên bảng contacts:

company=> select * from contacts;
ERROR:  permission denied for table contacts

※Để khôi phục các đặc quyền ban đầu của role hihongo, bạn sử dụng câu lệnh RESET ROLE:

RESET ROLE;
Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!
0 0 vote
Article Rating

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

guest
0 Comments
Inline Feedbacks
View all comments
Translate »
0
Would love your thoughts, please comment.x