Database authentication
Suggest editsSetting up your database authentication
Don't use the edb_admin database role and edb_admin database created when creating your cluster in your application. Instead, create a new database role and a new database, which provides a high level of isolation in Postgres. If multiple applications are using the same cluster, each database can also contain multiple schemas, essentially a namespace in the database. If you need strict isolation, use a dedicated cluster or dedicated database. If you don't need that strict isolation level, you can deploy a single database with multiple schemas. See Privileges in the PostgreSQL documentation to further customize ownership and roles to your requirements.
To create a new role and database, first connect using psql
:
psql -W "postgres://edb_admin@xxxxxxxxx.xxxxx.biganimal.io:5432/edb_admin?sslmode=require"
Note
Avoid storing data in the postgres system database.
One database with one application
For one database hosting a single application, replace app1
with your preferred user name:
Create a new database user. For example,
edb_admin=# create user app1 with password 'app1_pwd';
Assign the new role to your edb_admin user. Assigning this role allows you to assign ownership to the new user in the next step. For example:
edb_admin=# grant edb_admin to app1;
Create a new database to store application data. For example:
edb_admin=# create database app1 with owner app1;
Using this example, the username and database in your connection string is app1.
One database with multiple schemas
If you use a single database to host multiple schemas, create a database owner and then roles and schemas for each application. This example shows creating two database roles and two schemas. The default search_path
for database roles in Cloud Service is "$user",public
. If the role name and schema match, then objects in that schema match first, and no search_path
changes or fully qualifying of objects are needed. The PostgreSQL documentation covers the schema search path in detail.
Create a database owner and new database. For example:
edb_admin=# create user prod_admin with password 'prod_pwd'; edb_admin=# create database prod1 with owner prod_admin;
Connect to the new database. For example:
edb_admin=# \c prod1
Create new application roles. For example:
prod1=# create user app1 with password 'app1_pwd'; prod1=# grant edb_admin to app1; prod1=# create user app2 with password 'app2_pwd'; prod1=# grant edb_admin to app2;
Create a new schema for each application with the
AUTHORIZATION
clause for the application owner. For example: