Summary: In this tutorial, you’ll learn how to remove previously granted privileges on an object from a role using the PostgreSQL REVOKE statement.
PostgreSQL REVOKE Statement Overview #
The REVOKE statement removes previously granted privileges from roles, including:
- Users – roles with
LOGINprivilege. - Groups
PUBLIC– a pseudo-role
Here’s the syntax of the REVOKE statement:
REVOKE privilege1, privilege2
ON object_type object_name
FROM
role_name1,
role_name2;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)In this syntax:
privilege– a specific privilege to revoke, such asSELECT,INSERT,UPDATE, andDELETE.object_type– the type of database objectTABLE,VIEW, etc.object_name– the name of the database object.role_name– the name of the role from which you want to revoke the privilege.
Each object type has certain privileges.
PostgreSQL REVOKE Statement Example #
We’ll create a new role, grant privileges, and revoke one of them.
Step 1: Connect to your PostgreSQL and create a role called dev:
CREATE ROLE dev
WITH LOGIN PASSWORD 'securepassword';Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)Replace the 'securepassword' with your password.
Step 2: Create a new table called logs:
CREATE TABLE logs (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
message VARCHAR NOT NULL
);Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)Step 3: Grant INSERT and SELECT privileges on the logs table to the dev user:
GRANT SELECT, INSERT ON
TABLE logs
TO dev;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)The dev user can insert data into the logs table and select data from it.
Step 4: Verify the granted privileges:
SELECT
grantee,
privilege_type
FROM
information_schema.role_table_grants
WHERE
table_name = 'logs'
AND grantee = 'dev';Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)Step 5: Revoke INSERT privilege from the dev role:
REVOKE INSERT ON logs
FROM dev;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)Step 6: Verify that the INSERT privilege has been revoked successfully:
SELECT
grantee,
privilege_type
FROM
information_schema.role_table_grants
WHERE
table_name = 'logs'
AND grantee = 'dev';Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)Summary #
- Use the
REVOKEstatement to revoke a previously granted privilege.