---
title: "Настройка ролей в PostgreSQL"
description: "Настройка ролей в облачных базах PostgreSQL. Документация и инструкции по использованию и настройке облачных сервисов Timeweb Cloud."
---

# Настройка ролей

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Пользователь [с привилегией](https://timeweb.cloud/docs/dbaas/postgresql/users-and-privileges#dostupnye-privilegii) `CREATE ROLE` может:

-   создавать новых пользователей (`CREATE USER`);
-   создавать роли (`CREATE ROLE`);
-   управлять членством в ролях (`GRANT ... TO ...`).

## Создание пользователя

Пользователь — это роль, которой разрешено авторизовываться в базе. Такая роль может подключаться к базе с логином и паролем.

Создать пользователя с паролем можно при помощи запроса:

```sql
CREATE USER someuser WITH PASSWORD 'password';
```

Где `someuser` — логин пользователя, `password` — пароль.

Новый пользователь отобразится в панели управления DBaaS через некоторое время после создания.

![Scr 20250830 Nmbu](https://content.timeweb.com/assets/d170f716-9f8a-4055-9bff-ff8ed7ac97ae.png?width=2006&height=1384)

## Создание роли и назначение ее пользователю

Вместо того чтобы напрямую раздавать права каждому пользователю, лучше создавать роли с нужными правами, а потом назначать пользователей в эти роли.

Создадим две роли: одна с правами только на чтение, вторая — с правами на чтение и запись.

Роль с правами только на чтение:

```sql
CREATE ROLE app_reader;
```

Роль с правами на чтение и запись:

```sql
CREATE ROLE app_writer;
```

Назначим роль пользователю:

```sql
GRANT app_writer TO someuser;
```

## Настройка схемы

По умолчанию все таблицы в PostgreSQL создаются в схеме `public`. Для выдачи грантов необходимо создать новую схему:

```sql
CREATE SCHEMA app_data;
```

Создадим таблицы и явно укажем новую схему:

```sql
CREATE TABLE app_data.users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE NOT NULL
);

CREATE TABLE app_data.orders (
  id SERIAL PRIMARY KEY,
  user_id INTEGER REFERENCES app_data.users(id),
  order_date TIMESTAMP DEFAULT now()
);
```

Теперь можем выдать права на схему для ранее созданных ролей:

```sql
GRANT USAGE ON SCHEMA app_data TO app_reader;
GRANT USAGE ON SCHEMA app_data TO app_writer;
```

И право на создание объектов в схеме:

```sql
GRANT CREATE ON SCHEMA app_data TO app_writer;
```

## Установка прав на таблицы

Выдадим права на чтение всех существующих таблиц в схеме:

```sql
GRANT SELECT ON ALL TABLES IN SCHEMA app_data TO app_reader;
```

И права на запись:

```sql
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app_data TO app_writer;
```

Настроим права для новых таблиц, которые будут устанавливаться по умолчанию:

```sql
ALTER DEFAULT PRIVILEGES IN SCHEMA app_data 
GRANT SELECT ON TABLES TO app_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA app_data 
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;
```

И права по умолчанию для новых последовательностей:

```sql
ALTER DEFAULT PRIVILEGES IN SCHEMA app_data 
GRANT USAGE, SELECT ON SEQUENCES TO app_writer;
```
