Granting and Revoking Privileges
1. Granting Table Privileges
GRANT SELECT, INSERT, UPDATE, DELETE ON orders TO app_writer;
| Privilege | Effect |
|---|---|
| SELECT | Read rows |
| INSERT/UPDATE/DELETE | DML |
| TRUNCATE | Truncate table |
| REFERENCES | Create FK referencing table |
| TRIGGER | Create trigger on table |
2. Granting Column-Level Privileges
GRANT SELECT (id, email) ON customers TO support;
GRANT UPDATE (status) ON orders TO ops;
3. Granting ALL Privileges
GRANT ALL PRIVILEGES ON orders TO owner_role;
4. Granting on All Tables
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_reader;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO app_writer;
5. Revoking Privileges
REVOKE INSERT ON orders FROM app_writer;
REVOKE ALL ON SCHEMA public FROM PUBLIC;
6. Granting Schema Privileges
GRANT USAGE, CREATE ON SCHEMA app TO app_writer;
7. Granting Database Privileges
GRANT CONNECT, TEMP, CREATE ON DATABASE shop TO app_writer;
8. Granting Function Privileges
GRANT EXECUTE ON FUNCTION transfer(int,int,numeric) TO app_writer;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA api TO app_writer;
9. Granting Sequence Privileges
GRANT USAGE, SELECT, UPDATE ON SEQUENCE orders_id_seq TO app_writer;
10. Using WITH GRANT OPTION
GRANT SELECT ON customers TO support WITH GRANT OPTION;
11. Revoking with CASCADE
REVOKE SELECT ON customers FROM support CASCADE;
-- also revokes from anyone support granted to
12. Setting Default Privileges
ALTER DEFAULT PRIVILEGES IN SCHEMA app
GRANT SELECT ON TABLES TO app_reader;
ALTER DEFAULT PRIVILEGES FOR ROLE app_owner IN SCHEMA app
GRANT USAGE ON SEQUENCES TO app_writer;
Note: Only affects objects created AFTER the statement runs.
13. Checking Privileges
SELECT has_table_privilege('alice', 'orders', 'SELECT');
\dp orders
SELECT grantee, privilege_type FROM information_schema.role_table_grants
WHERE table_name='orders';