Инструменты пользователя

Инструменты сайта


databases:postgres

Это старая версия документа!


Postgres

Install

# apt install postgresql postgresql-contrib
# -u postgres psql -c "SELECT version();" 

Роли PostgreSQL и методы аутентификации

PostgreSQL поддерживает несколько методов аутентификации . Наиболее часто используемые методы:

  • Trust — роль может подключаться без пароля, если соблюдены критерии, определенные в pg_hba.confфайле.
  • Password - Роль может подключиться, указав пароль. Пароли могут быть сохранены как scram-sha-256 md5и password(открытый текст)
  • Ident — поддерживается только для соединений TCP/IP. Он работает путем получения имени пользователя операционной системы клиента с необязательным отображением имени пользователя.
  • Peer — то же, что и Ident, но поддерживается только для локальных подключений.

Аутентификация клиента PostgreSQL определяется в файле конфигурации с именем pg_hba.conf.
Пользователь «postgres» создается автоматически, в системе!!! и является суперпользователем для СУБД.

$ sudo su - postgres
$ psql 
$ sudo su - postgres -c "createuser kylo" 
$ sudo su - postgres -c "createdb kylodb"
psql$ GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;

По умолчанию сервер PostgreSQL слушает только локальный интерфейс 127.0.0.1.

$ sudo nano /etc/postgresql/11/main/postgresql.conf
listen_addresses = '*'     # what IP address(es) to listen on; 
$ sudo nano /etc/postgresql/11/main/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# The user jane will be able to access all databases from all locations using an md5 password
host    all             jane            0.0.0.0/0                md5
 
# The user jane will be able to access only the janedb from all locations using an md5 password
host    janedb          jane            0.0.0.0/0                md5
 
# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host    all             jane            192.168.1.134            trust 
CREATE DATABASE test_db;
CREATE USER test_user WITH encrypted password 'dbpassword';
GRANT ALL privileges ON DATABASE test_db TO test_user; 
CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'Passw0rd'; 

User Managment

:!: Роли базы данных концептуально полностью отделены от пользователей операционной системы. На практике может быть удобно поддерживать переписку, но это не обязательно. Роли базы данных являются глобальными для всей установки кластера базы данных (а не для отдельной базы данных).

CREATE ROLE name;
DROP ROLE name;
createuser name
dropuser name
SELECT rolname FROM pg_roles;

Role Attributes

Роль базы данных может иметь ряд атрибутов, которые определяют ее привилегии и взаимодействуют с системой аутентификации клиента

  • login privilege - Только роли, имеющие атрибут LOGIN, могут использоваться в качестве начального имени роли для соединения с базой данных. Роль с атрибутом LOGIN можно рассматривать как «пользователя базы данных».
  • superuser status - Суперпользователь базы данных обходит все проверки разрешений. Это опасная привилегия, и ею не следует пользоваться небрежно
  • database creation - Роли должно быть явно предоставлено разрешение на создание баз данных (за исключением суперпользователей
  • role creation - Роли должно быть явно предоставлено разрешение на создание дополнительных ролей
  • password - Пароль имеет значение только в том случае, если метод аутентификации клиента требует, чтобы пользователь ввел пароль при подключении к базе данных. Методы аутентификации password, md5 и crypt используют пароли. Пароли базы данных отделены от паролей операционной системы.

:!: CREATE USER эквивалентен CREATE ROLE, за исключением того, что CREATE USER предполагает LOGIN по умолчанию, а CREATE ROLE — нет.

:!: Атрибуты роли можно изменить после создания с помощью ALTER ROLE

ALTER ROLE myname SET enable_indexscan TO off; 
GRANT UPDATE ON accounts TO joe;
REVOKE ALL ON accounts FROM PUBLIC;
ALTER ROLE super WITH PASSWORD 'secret123';
\l - список баз
\c <dbname> выбор базы

OverAll

Форматирование вывода

Извлекаем таблицу (-l), убираем пробелы (-A) и седом меняем разделители на табы

sudo -u postgres psql -lA | sed -e "s/|/\t/g" 
sudo -i -u postgres psql -d zabbix -c "select * from functions ;" 

Узнать размер базы

 sudo -u postgres psql -c "SELECT pg_size_pretty( pg_database_size( 'DBName' ) );" 
 
databases/postgres.1661062314.txt.gz · Последнее изменение: 2022/08/21 06:11 — admin