Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
databases:postgres [2022/02/08 16:01] admin |
databases:postgres [2025/03/01 14:08] (текущий) admin [Роли PostgreSQL и методы аутентификации] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Postgres ====== | ====== Postgres ====== | ||
- | |||
- | |||
===== Install ===== | ===== Install ===== | ||
- | |||
<code bash># apt install postgresql postgresql-contrib</ | <code bash># apt install postgresql postgresql-contrib</ | ||
- | |||
<code bash># -u postgres psql -c " | <code bash># -u postgres psql -c " | ||
==== Роли PostgreSQL и методы аутентификации ==== | ==== Роли PostgreSQL и методы аутентификации ==== | ||
- | |||
**PostgreSQL** поддерживает несколько методов аутентификации . Наиболее часто используемые методы: | **PostgreSQL** поддерживает несколько методов аутентификации . Наиболее часто используемые методы: | ||
* **Trust** — роль может подключаться без пароля, | * **Trust** — роль может подключаться без пароля, | ||
Строка 20: | Строка 15: | ||
Пользователь " | Пользователь " | ||
- | <code bash>$ sudo su - postgres | + | <code bash> |
- | $ psql </ | + | $ sudo su - postgres |
+ | $ psql | ||
+ | |||
+ | # PG Activity | ||
+ | su postgres | ||
+ | bash-4.4$ pg_activity | ||
+ | |||
+ | </ | ||
Строка 27: | Строка 29: | ||
$ sudo su - postgres -c " | $ sudo su - postgres -c " | ||
psql$ GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;</ | psql$ GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;</ | ||
- | |||
По умолчанию сервер PostgreSQL слушает только локальный интерфейс 127.0.0.1.\\ | По умолчанию сервер PostgreSQL слушает только локальный интерфейс 127.0.0.1.\\ | ||
Строка 34: | Строка 35: | ||
- | + | <code bash> | |
- | <code bash>$ sudo nano / | + | $ sudo nano / |
# TYPE DATABASE | # TYPE DATABASE | ||
# The user jane will be able to access all databases from all locations using an md5 password | # The user jane will be able to access all databases from all locations using an md5 password | ||
host all | host all | ||
+ | host all | ||
+ | </ | ||
- | # The user jane will be able to access only the janedb from all locations using an md5 password | ||
- | host janedb | ||
- | # The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password | + | <code sql> |
- | host | + | create database test_db; |
+ | create | ||
+ | grant all privileges on database test_db to test_user; | ||
+ | CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD ' | ||
+ | </ | ||
+ | <code sql> | ||
+ | # List tables | ||
+ | \dt || SELECT * FROM pg_catalog.pg_tables; | ||
+ | # Список пользователей | ||
+ | \du | ||
+ | # Права пользователя | ||
+ | SELECT * FROM information_schema.table_privileges where grantee = ' | ||
+ | # Сменить пароль пользователю | ||
+ | \password < | ||
+ | </ | ||
- | <code sql> | ||
- | create user test_user with encrypted password ' | ||
- | grant all privileges on database test_db to test_user; </ | ||
- | <code sql>CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD | + | < |
+ | < | ||
+ | <code sql> | ||
+ | # Создаем нового пользователя, | ||
+ | create user < | ||
+ | |||
+ | # Настройку привилегий удобнее вынести в группу (роль), создаем роль с мин правами | ||
+ | create role <роль> nosuperuser nocreatedb nocreaterole noreplication inherit; | ||
+ | |||
+ | # Добавляем созданного пользователя в нее | ||
+ | grant < | ||
+ | |||
+ | # Далее настраиваем доступ (только select) для группы, | ||
+ | \c < | ||
+ | GRANT USAGE ON SCHEMA < | ||
+ | GRANT SELECT ON ALL TABLES IN SCHEMA < | ||
+ | GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO my_user; | ||
- | ==== User Managment ==== | + | |
+ | # Удаление прав | ||
+ | revoke usage on schema < | ||
+ | revoke all on all tables in schema < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== User Managment ==== | ||
:!: Роли базы данных концептуально полностью отделены от пользователей операционной системы. На практике может быть удобно поддерживать переписку, | :!: Роли базы данных концептуально полностью отделены от пользователей операционной системы. На практике может быть удобно поддерживать переписку, | ||
+ | <code sql> | ||
+ | CREATE ROLE name; | ||
+ | DROP ROLE name; | ||
- | <code sql> | + | createuser |
- | DROP ROLE name;</ | + | dropuser |
- | <code sql> | + | SELECT rolname FROM pg_roles; |
- | dropuser name</ | + | </ |
- | + | ||
- | <code sql>SELECT rolname FROM pg_roles;</ | + | |
==== Role Attributes ==== | ==== Role Attributes ==== | ||
- | |||
Роль базы данных может иметь ряд атрибутов, | Роль базы данных может иметь ряд атрибутов, | ||
- | |||
* **login privilege** - Только роли, имеющие атрибут LOGIN, могут использоваться в качестве начального имени роли для соединения с базой данных. Роль с атрибутом LOGIN можно рассматривать как «пользователя базы данных». | * **login privilege** - Только роли, имеющие атрибут LOGIN, могут использоваться в качестве начального имени роли для соединения с базой данных. Роль с атрибутом LOGIN можно рассматривать как «пользователя базы данных». | ||
* **superuser status** - Суперпользователь базы данных обходит все проверки разрешений. Это опасная привилегия, | * **superuser status** - Суперпользователь базы данных обходит все проверки разрешений. Это опасная привилегия, | ||
Строка 87: | Строка 121: | ||
REVOKE ALL ON accounts FROM PUBLIC;</ | REVOKE ALL ON accounts FROM PUBLIC;</ | ||
- | <code sql> | + | <code sql> |
+ | ALTER ROLE super WITH PASSWORD ' | ||
<code bash> | <code bash> | ||
Строка 94: | Строка 128: | ||
\c < | \c < | ||
</ | </ | ||
- | |||
==== OverAll ==== | ==== OverAll ==== | ||
+ | === Форматирование вывода === | ||
+ | <code bash> | ||
+ | # Извлекаем таблицу (-l), убираем пробелы (-A) и седом меняем разделители на табы | ||
+ | sudo -u postgres psql -lA | sed -e " | ||
+ | sudo -i -u postgres psql -d zabbix -c " | ||
+ | </ | ||
- | === Форматирование вывода === | + | <code bash> |
+ | # Узнать размер базы | ||
+ | sudo -u postgres psql -c " | ||
+ | |||
+ | # Активные подключения к базе | ||
+ | SELECT * from pg_stat_activity where datname | ||
+ | |||
+ | # Предотвращаем возможность новых подключений | ||
+ | UPDATE pg_database SET datallowconn | ||
+ | |||
+ | # Закрываем текущие сессии | ||
+ | SELECT pg_terminate_backend(pg_stat_activity.pid) | ||
+ | FROM pg_stat_activity | ||
+ | WHERE pg_stat_activity.datname = ' | ||
+ | |||
+ | # Удалить | ||
+ | DROP DATABASE database_name; | ||
+ | |||
+ | # Переименовать базу | ||
+ | alter database test rename to test1; | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | **Еще настройка** | ||
+ | <code bash> | ||
+ | echo export PATH=/ | ||
+ | export PGPORT=27953 | ||
+ | </ | ||
+ | |||
+ | Экспорт/ | ||
+ | [[https:// | ||
+ | <code bash> | ||
+ | su - postgres -c " | ||
+ | # Базу нужно создать перед восстановлением | ||
+ | su - postgres -c " | ||
+ | |||
+ | # Полный бекап | ||
+ | pg_dumpall -h localhost -p 27953 -U backuper --schema-only --file / | ||
+ | # Восстановление | ||
+ | psql -U postgres -p 27953 -f / | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | pg_lsclusters | ||
+ | |||
+ | pg_ctlcluster | ||
+ | |||
+ | pg_ctlcluster 9.4 secondary reload/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Liqubase ==== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | # | ||
+ | |||
+ | java -cp liquibase-core-4.9.0.jar: | ||
+ | liquibase.integration.commandline.LiquibaseCommandLine update \ | ||
+ | -Ddefaults-file=liquibase.properties \ | ||
+ | --url=${LIQUI_URL} \ | ||
+ | --username=${LIQUI_UNAME} \ | ||
+ | --password=${LIQUI_PASSWD} | ||
+ | </ | ||
+ | |||
+ | Файл .properties\\ | ||
+ | Аргументы переопределяют проперти\\ | ||
+ | <code yaml> | ||
+ | changeLogFile: | ||
+ | driver: org.postgresql.Driver | ||
+ | url: | ||
+ | username: | ||
+ | password: | ||
+ | verbose: true | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | В changelog используется так | ||
+ | <code xml> | ||
+ | (...) | ||
+ | ${my_var} // либо в кавычках | ||
+ | (...) | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | # | ||
+ | export LIQUIBASE_HOME=`pwd` | ||
+ | java -jar internal/ | ||
+ | --changelog-file=0001_changelog.xml \ | ||
+ | --url=jdbc: | ||
+ | --username=postgres \ | ||
+ | --password=postgres | ||
+ | </ | ||
+ | |||
+ | В подпапке " | ||
+ | </ | ||
- | Извлекаем таблицу (-l), убираем пробелы (-A) и седом меняем разделители на табы | ||
- | <code bash> | ||
+ | ==== Docker ==== | ||
+ | [[linux: | ||
- | <code bash> </ | ||
- | <code bash> </ | ||