Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
databases:postgres [2022/12/12 07:43] 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 | ||
Строка 47: | Строка 48: | ||
create user test_user with encrypted password ' | create user test_user with encrypted password ' | ||
grant all privileges on database test_db to test_user; | grant all privileges on database test_db to test_user; | ||
- | |||
CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD ' | CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD ' | ||
</ | </ | ||
Строка 54: | Строка 54: | ||
# List tables | # List tables | ||
\dt || SELECT * FROM pg_catalog.pg_tables; | \dt || SELECT * FROM pg_catalog.pg_tables; | ||
- | |||
# Список пользователей | # Список пользователей | ||
\du | \du | ||
- | |||
# Права пользователя | # Права пользователя | ||
SELECT * FROM information_schema.table_privileges where grantee = ' | SELECT * FROM information_schema.table_privileges where grantee = ' | ||
+ | # Сменить пароль пользователю | ||
+ | \password < | ||
</ | </ | ||
Строка 66: | Строка 65: | ||
< | < | ||
< | < | ||
- | |||
<code sql> | <code sql> | ||
# Создаем нового пользователя, | # Создаем нового пользователя, | ||
Строка 81: | Строка 79: | ||
GRANT USAGE ON SCHEMA < | GRANT USAGE ON SCHEMA < | ||
GRANT SELECT ON ALL TABLES IN SCHEMA < | GRANT SELECT ON ALL TABLES IN SCHEMA < | ||
- | + | ||
+ | GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO my_user; | ||
# Удаление прав | # Удаление прав | ||
Строка 92: | Строка 92: | ||
==== User Managment ==== | ==== User Managment ==== | ||
:!: Роли базы данных концептуально полностью отделены от пользователей операционной системы. На практике может быть удобно поддерживать переписку, | :!: Роли базы данных концептуально полностью отделены от пользователей операционной системы. На практике может быть удобно поддерживать переписку, | ||
- | |||
<code sql> | <code sql> | ||
Строка 106: | Строка 105: | ||
==== Role Attributes ==== | ==== Role Attributes ==== | ||
- | |||
Роль базы данных может иметь ряд атрибутов, | Роль базы данных может иметь ряд атрибутов, | ||
- | |||
* **login privilege** - Только роли, имеющие атрибут LOGIN, могут использоваться в качестве начального имени роли для соединения с базой данных. Роль с атрибутом LOGIN можно рассматривать как «пользователя базы данных». | * **login privilege** - Только роли, имеющие атрибут LOGIN, могут использоваться в качестве начального имени роли для соединения с базой данных. Роль с атрибутом LOGIN можно рассматривать как «пользователя базы данных». | ||
* **superuser status** - Суперпользователь базы данных обходит все проверки разрешений. Это опасная привилегия, | * **superuser status** - Суперпользователь базы данных обходит все проверки разрешений. Это опасная привилегия, | ||
Строка 124: | Строка 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> | ||
Строка 131: | Строка 128: | ||
\c < | \c < | ||
</ | </ | ||
- | |||
==== OverAll ==== | ==== OverAll ==== | ||
- | |||
- | |||
=== Форматирование вывода === | === Форматирование вывода === | ||
- | |||
<code bash> | <code bash> | ||
# Извлекаем таблицу (-l), убираем пробелы (-A) и седом меняем разделители на табы | # Извлекаем таблицу (-l), убираем пробелы (-A) и седом меняем разделители на табы | ||
Строка 145: | Строка 138: | ||
sudo -i -u postgres psql -d zabbix -c " | sudo -i -u postgres psql -d zabbix -c " | ||
</ | </ | ||
- | |||
Строка 169: | Строка 161: | ||
alter database test rename to test1; | 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> | ||
+ | #!/bin/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> | ||
+ | #!/bin/bash | ||
+ | export LIQUIBASE_HOME=`pwd` | ||
+ | java -jar internal/ | ||
+ | --changelog-file=0001_changelog.xml \ | ||
+ | --url=jdbc: | ||
+ | --username=postgres \ | ||
+ | --password=postgres | ||
+ | </ | ||
+ | |||
+ | В подпапке " | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Docker ==== | ||
+ | [[linux: | ||
+ | |||
+ | |||
+ | |||