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
:
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,
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:
Create a new database to store application data. For example:
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:
Connect to the new database. For example:
Create new application roles. For example:
Create a new schema for each application with the
AUTHORIZATION
clause for the application owner. For example: