Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yandex-cloud-examples/yc-postgresql-create-ro-dbuser
Создание БД PostgreSQL и пользователя в ней. Предоставление пользователю БД права только на чтение данных.
https://github.com/yandex-cloud-examples/yc-postgresql-create-ro-dbuser
postgress terraform yandex-cloud yandexcloud
Last synced: 5 days ago
JSON representation
Создание БД PostgreSQL и пользователя в ней. Предоставление пользователю БД права только на чтение данных.
- Host: GitHub
- URL: https://github.com/yandex-cloud-examples/yc-postgresql-create-ro-dbuser
- Owner: yandex-cloud-examples
- License: apache-2.0
- Created: 2024-03-08T08:41:19.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-03-08T10:07:48.000Z (10 months ago)
- Last Synced: 2024-11-07T21:37:38.439Z (about 2 months ago)
- Topics: postgress, terraform, yandex-cloud, yandexcloud
- Language: HCL
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Создание инстанса, базы данных и пользователей Postgresql и выдача пользователю прав только на чтение
### Зачем нужен
В Managed Postgresql процессы создания пользователя БД и выдачи ему прав разделены между API Yandex Cloud и непосредственно СУБД. Созадние пользователя - API, выдача прав - СУБД. Данные пример демонстрирует как создать пользователя БД и выдать ему права с помощью единого инструмента - terraform.
### Требования
* Консольная утилита управления Yandex Cloud [yc](https://cloud.yandex.com/docs/cli/quickstart)
* Облако (cloud\_id) и папка (folder\_id)
* Консольный клиент postgresql (psql)> ВНИМАНИЕ: инстанс СУБД создается с публичным адресом
> НЕ ДЛЯ ИСПОЛЬЗОВАНИЯ В ПРОДУКТИВЕ!### Описание
В процессе работы создаются следующие объекты в инфраструктуре Облака
* vpc
* subnet
* security group
* managed postgresql
* postgresql user `user_owner` (database owner)
* postgresql database `db1`
* Объекты базы данных (таблицы с тестовыми данными)
* postgresql user `user_ro` (read only user)
* Права (grant) `SELECT` на все объекты схемы `public` для пользователя `user_ro`### Подготовка и выполнение
1. Активировать рабочее окружение
```
export YC_TOKEN=$(yc iam create-token)
export TF_VAR_cloud_id=$(yc config get cloud-id)
export TF_VAR_folder_id=$(yc config get folder-id)
```
1. Сгенерировать 2 пароля```
export TF_VAR_user_owner_passwd=$(openssl rand -base64 12)
export TF_VAR_user_ro_passwd=$(openssl rand -base64 12)
```
1. Инициализировать Terraform
```
terraform init
```
1. Создать конфигурацию```
terraform apply
```
1. Проверить созданные объекты и права
Настройка продключения к БД: имя хоста БД выводится после создания конфигурации в разделе `Outputs````
export PGHOST=<имя хоста БД>
``````
export PGPORT=6432
export PGPASSWORD="$TF_VAR_user_ro_passwd"
```Подключение к БД
```
psql db1 user_ro
```
Проверка прав
```
SELECT * FROM "movies"; -- успех
DELETE FROM "movies"; -- ошибка permission denied
```
1. Удалить созданные ресурсы```
terraform destroy
```