Understanding and Practicing PostgreSQL Login/Group Roles in pgAdmin
Mohamad's interest is in Programming (Mobile, Web, Database and Machine Learning). He is studying at the Center For Artificial Intelligence Technology (CAIT), Universiti Kebangsaan Malaysia (UKM).
PostgreSQL provides a robust role-based access control mechanism for managing database permissions. In this tutorial, you’ll learn about Login/Group Roles in PostgreSQL using pgAdmin, understand their purpose, and practice creating and managing these roles.
What Are Login/Group Roles?
Roles in PostgreSQL are entities that manage:
Authentication: Roles with login privileges can access the database.
Permissions: Roles define what a user can do (e.g., read, write, execute).
Group Management: Group roles allow multiple users to share permissions.
Prerequisites
pgAdmin installed and connected to a PostgreSQL server.
Access to a database with sufficient privileges (e.g.,
postgresuser).
Overview of Key Roles
The list provided shows common predefined PostgreSQL roles:
pg_checkpoint: Allows initiating a checkpoint in the database.
pg_create_subscription: Grants permission to create subscriptions for logical replication.
pg_database_owner: Role specific to ownership of databases.
pg_execute_server_program: Enables execution of server-side programs.
pg_maintain: Grants privileges for maintenance tasks.
pg_monitor: Allows viewing statistics and monitoring data.
pg_read_all_data: Grants read access to all tables in the database.
pg_write_all_data: Grants write access to all tables in the database.
Step-by-Step Guide to Understanding and Practicing Roles
1. Viewing Roles in pgAdmin
Open pgAdmin.
Navigate to the Login/Group Roles section in your PostgreSQL instance.
Right-click on a role (e.g.,
pg_monitor) and select Properties to view its details.
Task: Analyze Predefined Roles
Look at the Privileges, Membership, and Settings for each predefined role.
Note which roles can:
Login to the database.
Perform specific administrative tasks (e.g., checkpointing or monitoring).
2. Creating a New Role
Task: Create a Login Role
Right-click on Login/Group Roles > Create > Login/Group Role.
Fill in the General tab:
Role Name:
app_userPassword: Set a secure password.
Check Can login.
Set privileges in the Privileges tab (e.g.,
CONNECT,SELECT).Save the role.
Task: Create a Group Role
Right-click on Login/Group Roles > Create > Login/Group Role.
Fill in the General tab:
Role Name:
app_teamLeave Can login unchecked.
Assign members in the Members tab.
- Add the
app_userrole as a member.
- Add the
3. Granting Permissions to Roles
Task: Assign Privileges
Right-click on a database or table > Grant Wizard.
Select the
app_userrole and grant:CONNECT permission on the database.
SELECT permission on a table.
4. Practicing Role Management
Scenario: Role Inheritance
Create a group role
data_analystswith SELECT permission on a table.Add multiple user roles (e.g.,
analyst1,analyst2) as members.Test if
analyst1can query the table.
-- Granting permissions
GRANT SELECT ON TABLE my_table TO data_analysts;
-- Testing with analyst1
SET ROLE analyst1;
SELECT * FROM my_table;
Scenario: Revoking Permissions
Revoke the SELECT permission from
data_analysts.Confirm
analyst1can no longer query the table.
REVOKE SELECT ON TABLE my_table FROM data_analysts;
5. Exploring Predefined Roles
Task: Use Monitoring Roles
Assign
pg_monitorto a user role.View monitoring information by querying statistics.
SELECT * FROM pg_stat_activity;
Task: Test Maintenance Roles
Assign
pg_maintainto a user.Perform maintenance tasks like vacuuming.
VACUUM ANALYZE my_table;
Best Practices
Use Group Roles: Assign permissions at the group level and add users as members.
Minimize Privileges: Grant only necessary permissions to reduce security risks.
Monitor Activity: Use roles like
pg_monitorto keep track of database activity.
Challenge
Design a role hierarchy:
Create three roles:
admin: Full privileges.editor: Can modify data.viewer: Can only read data.
Test the hierarchy by assigning permissions to sample tables.
This tutorial offers a hands-on approach to understanding Login/Group Roles in PostgreSQL using pgAdmin.