Bài viết này sẽ mô tả cách sử dụng lệnh PostgreSQL DROP ROLE để loại bỏ, xóa một role.
1. Lệnh xóa role
Loại bỏ hay xóa một role bằng lệnh DROP ROLE có cú pháp như sau:
DROP ROLE [ IF EXISTS ] role_name [, ...]
※Để loại bỏ role superuser, bạn cần phải là một superuser. Để loại bỏ các roles không phải là superuser, bạn cần có đặc quyền CREATEROLE.
Trước khi xóa một role, bạn phải bỏ hoặc thay đổi chủ sở hữu của các đối tượng cơ sở dữ liệu do role đó đang sở hữu. Ngoài ra, nếu role có đặc quyền trên các đối tượng cơ sở dữ liệu, bạn cũng phải loại bỏ tất cả các đặc quyền đó.
Các role hiện tại:
\du
Chúng ta sẽ xóa role fpt_minhhn:
DROP ROLE fpt_minhhn;
Role fpt_minhhn đã bị loại bỏ:
2. Trường hợp role bị xóa là chủ sở hữu của đối tượng cơ sở dữ liệu
Nếu role bạn đang cố gắng loại bỏ là chủ sở hữu của một đối tượng cơ sở dữ liệu như schemas, tables, views,… thì bạn phải loại bỏ đối tượng hoặc thay đổi quyền sở hữu sang một role khác trước khi loại bỏ role đó. Ngoài ra, nếu bạn đã thêm các đặc quyền cho tables,… vào role thì phải cần xóa các đặc quyền trước khi xóa role.
Bạn có thể xóa từng đối tượng hoặc cũng có thể xóa đồng thời các đối tượng thuộc sở hữu của role đã chỉ định trong cơ sở dữ liệu.
Có thể bạn quan tâm:
– Lệnh DROP OWNED xóa tất cả các đối tượng cơ sở dữ liệu thuộc sở hữu của một role cụ thể
– Lệnh REASSIGN OWNED thay đổi quyền sở hữu các đối tượng cơ sở dữ liệu
Chúng ta sẽ xóa role minhhoangblog:
DROP ROLE minhhoangblog;
Lỗi “ERROR: Cannot delete the role “minhhoangblog” as it depends on other objects” không thể xóa role minhhoangblog vì có đối tượng khác phụ thuộc vào nó và việc xóa role không thành công. Thông báo lỗi cũng cho thấy nguyên nhân gây ra lỗi không thể xóa là do role minhhoangblog đang sở hữu bảng business và lược đồ myschema3.
Do đó trước khi xóa role minhhoangblog, chúng ta cần xóa một lần tất cả các đối tượng cơ sở dữ liệu mà role minhhoangblog đang là owner bằng lệnh DROP OWNED hoặc xóa lần lượt từng đối tượng bảng business và lược đồ myschema3 như sau:
DROP TABLE business; DROP SCHEMA myschema3;
Như vậy đã xóa bảng business và lược đồ myschema3 thành công. Chúng ta thực hiện lại lệnh xóa role minhhoangblog:
DROP ROLE minhhoangblog;
Lúc này role minhhoangblog đã được xóa thành công:
\du