Learn how to use PostgreSQL REVOKE to remove privileges from roles and secure your database. Includes syntax, examples for SELECT, INSERT, UPDATE, DELETE, and REVOKE ALL.
In PostgreSQL, the REVOKE command is used to remove permissions (privileges) that were previously given using GRANT.
π In simple words: REVOKE = Take back access
We use REVOKE to:
REVOKE privilege(s)
ON object_name
FROM role_name;
| Privilege | Meaning |
|---|---|
| SELECT | Read data |
| INSERT | Add data |
| UPDATE | Modify data |
| DELETE | Remove data |
| ALL | Remove all privileges |
GRANT SELECT ON students TO student;
REVOKE SELECT ON students FROM student;
π Student can no longer read the table.
REVOKE SELECT ON marks FROM student;
REVOKE INSERT, UPDATE ON marks FROM teacher;
REVOKE ALL PRIVILEGES ON students FROM it_staff;
You will learn how to:
REVOKEWe already have:
university_db
studentteacheradminstudentscoursesmarksenrollmentsBefore revoking, check what a role has:
```sql id=βchk1β \dp students
π This shows current privileges on the table.
---
# π« STEP 2: Revoke Student Permissions (Full Restriction)
## β Remove SELECT access from students table
```sql id="rvk1"
REVOKE SELECT ON students FROM student;
```sql id=βrvk2β REVOKE SELECT ON courses FROM student; REVOKE SELECT ON enrollments FROM student; REVOKE SELECT ON marks FROM student;
π Now student cannot read any data.
---
# π§ͺ TEST AFTER REVOKE (Student Login)
```sql id="test1"
SELECT * FROM students;
β ERROR: permission denied
```sql id=βrvk3β REVOKE UPDATE ON marks FROM teacher;
## β Remove insert access
```sql id="rvk4"
REVOKE INSERT ON marks FROM teacher;
```sql id=βtest2β INSERT INTO marks(student_id, course_id, marks) VALUES (1, 1, 88);
β Should FAIL
---
# π§βπΌ STEP 4: Revoke ALL Permissions from Admin (Extreme Case)
β οΈ Used in system reset or security emergency
```sql id="rvk5"
REVOKE ALL PRIVILEGES ON students FROM admin;
REVOKE ALL PRIVILEGES ON courses FROM admin;
REVOKE ALL PRIVILEGES ON marks FROM admin;
REVOKE ALL PRIVILEGES ON enrollments FROM admin;
π Admin loses table-level access (NOT superuser privilege if assigned separately)
```sql id=βrvk6β REVOKE CONNECT ON DATABASE university_db FROM student;
```sql id="rvk7"
REVOKE CONNECT ON DATABASE university_db FROM teacher;
When student tries to connect:
```bash id=βtest3β \c university_db
β ERROR: permission denied
---
# π STEP 7: Advanced REVOKE (Cascade Effect)
If you granted multiple permissions:
```sql id="rvk8"
REVOKE ALL ON marks FROM teacher;
π Removes:
| Command | Action |
|---|---|
| GRANT | Give permission |
| REVOKE | Remove permission |
β You can only revoke what was granted β Only owner or admin can revoke permissions β REVOKE does NOT delete user β REVOKE only removes access, not data
University decides:
sql id="rvk9"
REVOKE INSERT, UPDATE ON marks FROM teacher;
After completing this lab, you learned:
β How to remove permissions step-by-step β How to restrict students, teachers, admins β How database security is dynamically controlled β Real-world control of university system access