This guide will walk you through the process of creating a secure, read-only
Supabase user specifically for connecting to the application. Supabase uses
PostgreSQL, so some steps will be similar to PostgreSQL setup.
Why Create a Read-Only User?
Creating a dedicated read-only user ensures:- Enhanced Security: Limits potential data manipulation risks.
- Data Integrity: Prevents accidental modifications to your database.
- Compliance: Adheres to the principle of least privilege.
Step-by-Step Guide
Follow these steps to create your Supabase read-only user:1. Access Supabase SQL Editor
First, log in to your Supabase project and navigate to the SQL Editor.2. Create the Read-Only User
Create a new user with a secure password:3. Grant Connect Privilege
Grant the user the ability to connect to the database:In Supabase, the main database is typically named ‘postgres’.
4. Grant Schema Usage
Grant usage on the public schema and any other schemas you want the user to access:5. Grant Select Privileges
Grant SELECT privileges on all tables in the schema:6. Grant Additional Necessary Privileges
For full read-only access, grant privileges on sequences:7. Apply Row Level Security (RLS) Policies
Ensure that appropriate Row Level Security policies are in place:Verifying the User Setup
To confirm that the user has been set up correctly:-
Use the Supabase SQL Editor to run queries as the readonly user:
-
Attempt to modify data (this should fail):
Connecting to Your Application
When setting up your connection in your application:- Use the Supabase project’s connection string or host
- Enter ‘readonly’ as the username
- Use the secure password you set in step 2
- Use the default database name (typically ‘postgres’)
Supabase provides connection information in the project settings. Make sure
to use these details when configuring your application.
Supabase-Specific Notes
- Row Level Security (RLS): Supabase heavily relies on RLS. Ensure your RLS policies are correctly set up for the readonly user.
- Realtime Subscriptions: If using Supabase’s realtime features, ensure the readonly user has appropriate permissions for subscriptions.
- Supabase API: If you’re using Supabase’s API, you’ll need to create an API key with read-only permissions instead of a database user.
- Supabase Functions: For serverless functions, use appropriate service roles that have read-only access.
Troubleshooting
If you encounter issues:- Check the Supabase logs in the dashboard for detailed error messages
- Verify that all necessary privileges have been granted
- Ensure the user has been created successfully
- Check that you’re using the correct connection details in your application
- Verify that RLS policies are not overly restrictive
Must-Know Details
- Connection Pooling: Supabase uses PgBouncer for connection pooling. Be aware of this when troubleshooting connection issues.
- SSL Connections: Supabase enforces SSL connections. Ensure your application supports this.
- Automatic Backups: Supabase provides automatic backups. The readonly user won’t affect these, but it’s good to be aware of this feature.
- Schema Migrations: When applying schema migrations, remember to update permissions for the readonly user if new tables or schemas are added.
- Supabase Dashboard: While you can create a readonly database user, many operations in Supabase are designed to be done through the dashboard or API.

