Skip to content

PostgreSQL Permissions

Overview

PostgreSQL uses roles and privileges to control access to database objects.

Create Role

sql
-- Create login role
CREATE ROLE username WITH LOGIN PASSWORD 'password';

-- Create role with database
CREATE ROLE app_user WITH LOGIN PASSWORD 'password123' CREATEDB;

GRANT

sql
-- Grant privileges on table
GRANT SELECT, INSERT, UPDATE, DELETE ON users TO app_user;

-- Grant all privileges
GRANT ALL PRIVILEGES ON users TO admin;

-- Grant on schema
GRANT USAGE ON SCHEMA public TO app_user;

-- Grant on database
GRANT CONNECT ON DATABASE mydb TO app_user;

REVOKE

sql
REVOKE INSERT, UPDATE ON users FROM app_user;
REVOKE ALL PRIVILEGES ON users FROM guest;

Role Attributes

sql
-- Superuser
CREATE ROLE super WITH LOGIN PASSWORD 'pass' SUPERUSER;

-- Create database
CREATE ROLE db_admin WITH LOGIN PASSWORD 'pass' CREATEDB;

-- Create role
CREATE ROLE role_admin WITH LOGIN PASSWORD 'pass' CREATEROLE;

-- Replication
CREATE ROLE replicator WITH LOGIN PASSWORD 'pass' REPLICATION;

Overview

Group Roles

sql
-- Create group
CREATE GROUP developers;

-- Add members
GRANT developers TO alice;
GRANT developers TO bob;

-- Grant to group
GRANT SELECT ON products TO developers;

Row Level Security

sql
-- Enable RLS
ALTER TABLE users ENABLE ROW LEVEL SECURITY;

-- Create policy
CREATE POLICY user_policy ON users
    FOR SELECT
    USING (user_id = current_setting('app.current_user')::INTEGER);

Create Role

Permissions:

  • CREATE ROLE, GRANT, REVOKE
  • Various privilege types
  • Role attributes
  • Group roles
  • Row Level Security

Content is for learning and research only.