Ở 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)
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:
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”
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;
Quyền tạo schema cho database mydb đã được thêm vào. Chạy lệnh \l mydb để xác nhận.
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;
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
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:
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));
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;
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á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));
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.*
[…] Xem thêm: Cấp đặc quyền (privileges) cho ROLE bằng lệnh PostgreSQL GRANT (Phần 2) […]