PostgreSQL

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2)

Cấp đặc quyền (privileges) cho role bằng lệnh PostgreSQL GRANT (Phần 2)
Đượ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 Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 1) chúng ta đã biết ý nghĩa của lệnh PostgreSQL GRANT và cách sử dụng để cấp quyền cho role thao tác với bảng và cột của bảng.

Xem thêm: Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 1)

Trong bài viết này sẽ tiếp tục mô tả cách sử dụng câu lệnh PostgreSQL GRANT để cấp các đặc quyền thao tác trên lược đồ (schema), các bảng trong lược đồ,… cho một role.

4. Thêm quyền để tạo lược đồ (schema) cho cơ sở dữ liệu

4. Thêm quyền để tạo lược đồ (schema)

Tiếp theo sẽ trình bày cách thêm quyền để tạo một lược đồ trong cơ sở dữ liệu đã chỉ định.

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]

Ví dụ: thêm quyền tạo schema trên database_name cho role_name

GRANT CREATE ON DATABASE database_name TO role_name;

Khi sử dụng metacommand psql để kiểm tra các quyền trên database mydb, chúng ta thấy rằng role name nihongo không có quyền nào được thêm trên database này:

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 1

Do đó, khi tạo schema momo trên database mydb bằng role name nihongo thì sẽ nhận được thông báo lỗi “ERROR: Access to database mydb is denied

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 2

Bây giờ để thêm quyền có thể tạo lược đồ (schema) cho cơ sở dữ liệu mydb cho role nihongo sẽ thực hiện lệnh sau khi kết nối như một superuser, chẳng hạn là postgres.

GRANT CREATE ON DATABASE mydb TO nihongo;

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 3

Quyền tạo schema cho database mydb đã được thêm vào. Chạy lệnh \l mydb để xác nhận.

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 4

Các giá trị sau được đặt trong quyền truy cập:

=Tc/postgres                 +
postgres=CTc/postgres+
momo=C/postgres

Cách đọc giá trị cài đặt giống như đã trình bày ở bài viết Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 1). Ở đây là role postgres đã thêm quyền C (CREATE) cho role nihongo.

Sau khi kết nối với PostgreSQL bằng role nihongo, thử tạo lược đồ momo trong cơ sở dữ liệu mydb:

CREATE SCHEMA momo;

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 5

Lúc này đã tạo schema momo thành công. Chúng ta chạy lệnh \dn để xác nhận:

\dn

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 6

5. Thêm quyền để tạo các đối tượng, chẳng hạn như tables, views,... trong lược đồ

5. Thêm quyền để tạo các đối tượng, chẳng hạn như tables, views,… trong lược đồ

Cuối cùng, phần này sẽ trình bày cách thêm đặc quyền để tạo các đối tượng, chẳng hạn như các bảng trong lược đồ đã chỉ định.

GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]

Lệnh sau thêm quyền tạo table, view, function,… trên schema_name cho role_name:

GRANT CREATE ON SCHEMA schema_name TO role_name;

Lệnh sau thêm quyền truy cập table, view, function,… trên schema_name cho role_name:

GRANT USAGE ON SCHEMA schema_name TO role_name;

Khi sử dụng metacommand \dn+ để kiểm tra các quyền trên lược đồ myschema, chúng ta thấy rằng role name nihongo không có quyền nào được thêm trên schema này:

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 7

Do đó, khi tạo đối tượng chẳng hạn như bảng product trong lược đồ myschema trên database mydb bằng role name nihongo thì sẽ nhận được thông báo lỗi “ERROR: Access denied to schema myschema

CREATE TABLE myschema.product (id integer, name varchar(10));

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 8

Bây giờ để thêm quyền có thể tạo bảng trong lược đồ myschema cho role nihongo sẽ thực hiện lệnh sau khi kết nối như một superuser, chẳng hạn là postgres.

GRANT CREATE ON SCHEMA myschema TO nihongo;

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 9

Quyền tạo đối tượng như table, view,… trong lược đồ myschema đã được thêm vào. Chạy lệnh ¥dn+ để xác nhận.

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 10

Các giá trị sau được đặt trong quyền truy cập:

postgres=UC/postgres+
nihongo=C/postgres

Cách đọc giá trị cài đặt giống như đã trình bày ở bài viết Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 1). Ở đây là role postgres đã thêm quyền C (CREATE) cho role nihongo.

Chúng ta sẽ thực hiện lại câu lệnh tạo bảng product bên trên:

CREATE TABLE myschema.product (id integer, name varchar(10));

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 11

Lúc này đã tạo bảng product thành công. Chúng ta chạy lệnh \dp myschema.* để xác nhận:

\dp myschema.*

Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) - Hình 12

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!

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[...]

Translate »