Как изменить пароль пользователя postgresql?

А куда сохраняются мои данные?

Базы данных – это в первую очередь история про персистентность. И,.. Хьюстон, кажется у нас проблема… К настоящему моменту мы никак не управляем долговременным хранением нашей базы данных. Эту задачу целиком на себя берёт Docker, автоматически создавая volume для контейнера с БД. Есть целый ворох причин, почему это плохо, начиная от банальной невозможности просматривать содержимое volume’ов в бесплатной версии Docker Desktop и заканчивая лимитами дискового пространства.

Разумеется, хорошей практикой является полностью ручное управление физическим размещением создаваемых баз данных. Для этого нам нужно подмонтировать соответствующий каталог (куда будут сохраняться данные) в контейнер и при необходимости переопределить переменную окружения PGDATA:

Вариант с макросом, использующий для инициализации БД скрипты из предыдущего раздела:

С однострочниками на этом закончим. Все дальнейшие шаги будем осуществлять только через compose-файл:

При запуске этого скрипта рядом с ним создастся директория pgdata, где будут располагаться файлы БД.

III. Восстановить из бэкапа базу данных PostgreSQL

Для восстановления базы данных из резервной копии необходимы утилиты psql.exe и pg_restore.exe. Обе утилиты входят в компонент Command Line Tools PostgreSQL, который устанавливается вместе с PostgreSQL Server. Они находятся в каталоге установленного программного обеспечения PostgreSQL.

Если вы планируете использовать удаленную базу данных PostgreSQL и не устанавливать PostgreSQL Server, то выполните следующие шаги:

  1. Скачайте бинарный пакет PostgreSQL. Найти его можно на официальном сайте продукта.

  2. При установке пакета выберите также установку компонента Command Line Tools. Установка остальных компонентов опциональна.

Чтобы развернуть базу данных из бэкапа:

  1. Откройте командную строку.

  2. Перейдите в папку с установочными файлами PostgreSQL:

    \\path\to\PostgreSQL\folder — путь к папке с установочными файлами PostgreSQL.

  3. Перейдите в папку с исполнимыми модулями:

  4. Установите пароль подключения к серверу БД в переменную окружения:

    pg_syspassword — пароль пользователя  pg_sysadmin для подключения к серверу PostgreSQL.

  5. Создайте базу данных, в которую будет выполнено восстановление резервной копии:

    pg_server_address — адрес сервера PostgreSQL;

    pg_server_port — порт сервера PostgreSQL;

    pg_sysadmin — пользователь, которому предоставлены права администратора.

    pg_dbname — имя БД, в контексте которой происходит выполнение инструкций.

    Если вы еще не создали базу данных или попытка подключения завершается ошибкой “FATAL: database «pg_dbname» does not exist”, то воспользуйтесь БД “template1”, которая создается в PostgreSQL по умолчанию.

    pg_dbname_creatio — имя БД PostgreSQL, в которой будут храниться таблицы Creatio.

    pg_user — пользователь с ограниченными правами, который используется для подключения к базе данных Creatio.

  6. Если вы используете AWS RDS:

    1. Скачайте скрипт ChangeTypesOwner.sql.

    2. Замените в скрипте значение “postgres” на актуальное имя пользователя Postgres.

    3. Выполните обновленный скрипт ChangeTypesOwner.sql.

  7. Восстановите базу данных из бэкапа:

    pg_server_address — адрес сервера PostgreSQL;

    pg_server_port — порт сервера PostgreSQL;

    pg_sysadmin — пользователь, которому предоставлены права администратора.

    pg_dbname_creatio — имя БД PostgreSQL, в которую будут добавлены таблицы резервной копии. Используйте имя базы данных, указанное в команде «CREATE DATABASE»   на шаге 2.

  8. Скачайте файл CreateTypeCastsPostgreSql.sql.

  9. Выполните преобразование типов:

    psql.exe —host pg_server_ip —port pg_server_port —username=pg_sysadmin —dbname=pg_dbname_creatio —file=\\путь\к\CreateTypeCastsPostgreSql.sql

    pg_server_ip — адрес сервера PostgreSQL;

    pg_server_port — порт сервера PostgreSQL;

    pg_sysadmin — пользователь, которому предоставлены права администратора.

    pg_dbname_creatio — имя БД, в контексте которой происходит выполнение инструкций.

    \\путь\к\CreateTypeCastsPostgreSql.sql — путь к сохраненному ранее файлу CreateTypeCastsPostgreSql.sql.

  10. В Creatio версии 7.16.3 и выше существует возможность при восстановлении из резервной копии заменить владельца БД и ее объектов на пользователя, не являющегося системным администратором (не Superuser). Для этого вам потребуется скрипт ChangeDbObjectsOwner. Скачать скрипт.
    Чтобы восстановить БД от имени пользователя, не являющегося администратором:

    1. Замените владельца БД:

      pg_server_ip — адрес сервера PostgreSQL.pg_server_port — порт сервера PostgreSQL.pg_sysadmin — пользователь для подключения к серверу PostgreSQL. Пользователь должен являться администратором (Superuser) или иметь права на создание базы данных (команда «CREATE DATABASE»).pg_user — новый владелец БД.pg_dbname_creatio — имя БД, владелец которой заменяется.

    2. Замените владельца объектов БД:

      pg_server_ip — адрес сервера PostgreSQL.pg_server_port — порт сервера PostgreSQL.pg_sysadmin — пользователь для подключения к серверу PostgreSQL. Пользователь должен являться администратором (Superuser) или иметь права на создание базы данных (команда «CREATE DATABASE»).pg_user — новый владелец БД.pg_dbname_creatio — имя БД, владелец которой заменяется;\\путь\к\ChangeDbObjectsOwner.sql — путь к сохраненному ранее файлу ChangeDbObjectsOwner.sql.

Вы можете пропустить этот шаг, и в таком случае владельцем БД и ее объектов останется пользователь, от имени которого запускалась команда pg_restore. Обычно это пользователь postgres.

Изменение кодировки новой базы данных на UTF-8 (по вашему усмотрению)

Когда создаётся новая база данных (например, ) PostgreSQL просто копирует шаблон базы данных. Есть два стандартных шаблона: template0 — ваниль, и template1 используемый по умолчанию. Один из вариантов изменения кодировки новой базы данных, заключается в изменении шаблона template1. Для этого, заходим в оболочку PostgresSQL (psql) и делаем вот что:

1. Первое, мы должны сбросить template1. Шаблоны не могут быть сброшены, так что мы сначала изменим его, как обычную базу данных:

UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';

2. Сейчас уже можно сбросить её:

DROP DATABASE template1;

3. Создаём новую базу данных, с новой кодировкой по умолчанию из template0:

CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';

4. Теперь снова сделаем template1 шаблоном:

UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1'; 
\c template1
VACUUM FREEZE;

6. (По желанию) Если вы не хотите, чтобы кто-либо подключался к этому шаблону, присвойте параметру datallowconn значение FALSE:

UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template1';

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

su - 
su - postgres
createdb blog;

Если снова войти в PSQL и проверить базу данных, вы должны увидеть правильную кодировку новой базы данных:

\l

returns

                              List of databases
  Name    |  Owner   | Encoding  | Collation | Ctype |   Access privileges   
-----------+----------+-----------+-----------+-------+----------------------
blog      | postgres | UTF8      | C         | C     | 
postgres  | postgres | SQL_ASCII | C         | C     | 
template0 | postgres | SQL_ASCII | C         | C     | =c/postgres
                                                     : postgres=CTc/postgres
template1 | postgres | UTF8      | C         | C     |

Основные настройки

Конфигурационный файл отвечающий за настройки аутентификации – pg_hba.conf. Он находится в каталоге PGDATA:

postgres@s-pg13:~$ ls -l $PGDATA/pg_hba.conf
-rw------- 1 postgres postgres 4760 июн 21 15:15 /usr/local/pgsql/data/pg_hba.conf

Его местоположение можно изменить задав параметр hba_file в конфигурационном файле postgresql.conf:

postgres@s-pg13:~$ cat $PGDATA/postgresql.conf | grep hba
#hba_file = 'ConfigDir/pg_hba.conf'     # host-based authentication file

При изменении этого файла конфигурацию сервера нужно перечитать, выполнив:

  • – из операционной системы;
  • – если вы подключены к СУБД.

Если вы подключены к СУБД, то узнать местоположение файла можно таким способом:

postgres@s-pg13:~$ psql
Timing is on.
psql (13.3)
Type "help" for help.

postgres@postgres=# SHOW hba_file;
             hba_file
-----------------------------------
 /usr/local/pgsql/data/pg_hba.conf
(1 row)
Time: 0,740 ms

Файл pg_hba.conf состоит из строк, а строки состоят из следующих полей:

  • тип подключения;
  • имя БД;
  • имя пользователя;
  • адрес узла;
  • метод аутентификации;
  • необязательные дополнительные параметры в виде имя=значение. Эти параметры нужны некоторым методам аутентификации.

Эти строки обрабатываются сверху вниз и применяется первая найденная строка. Таким образом если тип подключения, имя БД, имя пользователя и адрес сервера совпали, то применяется определённый метод аутентификации.

pg_hba – если-то

При подключении выполняется аутентификация и проверяется привилегия CONNECT. Если результат отрицательный, доступ запрещается и строки ниже не рассматриваются. Если ни одна запись не подошла, доступ запрещается. Таким образом записи должны идти сверху вниз от частного к общему.

Вот пример файла pg_hba.conf, который создаётся при сборке из исходников:

# TYPE  DATABASE      USER    ADDRESS          METHOD
local   all           all                      trust
host    all           all     127.0.0.1/32     trust
host    all           all     ::1/128          trust
local   replication   all                      trust
host    replication   all     127.0.0.1/32     trust
host    replication   all     ::1/128          trust

Первая строчка это тип подключения local, в котором используется локальный unix сокет, и не задействована сеть. При таком подключении все пользователи (all) могут подключаться методом trust. О методах поговорим позже.

Третья и четвёртая строки относятся к tcp подключениям (host). При таком подключении все пользователи могут подключаться только из локального хоста (127.0.0.1/32 или ::1/128) используя метод trust.

Последние три строки относятся к репликации. Репликация возможна по сокету (local) и по сети (host) но только с локального хоста (127.0.0.1/32 или ::1/128). Здесь тоже используется метод trust.

Если вы подключены к СУБД, то сможете посмотреть содержимое файла pg_hba.conf с помощью представления pg_hba_file_rules:

postgres@postgres=# SELECT * FROM pg_hba_file_rules;
 line_number | type  |   database    | user_name |  address  |                 netmask                 | auth_method | options | error
-------------+-------+---------------+-----------+-----------+-----------------------------------------+-------------+---------+-------
          88 | local | {all}         | {all}     |           |                                         | trust       |         |
          90 | host  | {all}         | {all}     | 127.0.0.1 | 255.255.255.255                         | trust       |         |
          92 | host  | {all}         | {all}     | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust       |         |
          95 | local | {replication} | {all}     |           |                                         | trust       |         |
          96 | host  | {replication} | {all}     | 127.0.0.1 | 255.255.255.255                         | trust       |         |
          97 | host  | {replication} | {all}     | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust       |         |
(6 rows)
Time: 2,006 ms

Если в строке допущена ошибка, то это представление в поле error покажет ошибку.

Создание временных пользователей в PostgreSQL

Давайте теперь рассмотрим настройку, при которой Vault будет создавать временных пользователей. Для этого мы:

  1. Создадим роль в Vault, которая будет создавать учетную запись в базе PostgreSQL.
  2. Настроим файл pg_hba.conf для возможности подключаться к базе пользователям по паролю.
  3. Проверим настройки, создав учетную запись и подключившись к СУБД.

Приступим.

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

Настройка задается с помощью roles. На сервере Vault вводим команду:

vault write database/roles/postgresql-create \
 db_name=postgresql \
 creation_statements=»CREATE ROLE \»`name`\» WITH LOGIN PASSWORD ‘`password`’ VALID UNTIL ‘`expiration`’; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO «`name`»;» \
 default_ttl=»1h» \
 max_ttl=»24h»

* обратите внимание, что запрос creation_statements важно написать именно так — первая кавычка двойная, остальные одинарные. ** в данном примере:

** в данном примере:

  • Мы создадим роль с названием postgresql-create (с тем названием, которое мы использовали в allowed_roles, когда создавали конфигурацию).
  • Опция db_name должна называться как настройка, которую мы создали на шаге создания конфига (database/config/postgresql).
  • Наша роль будет выполнять команду creation_statements — создавать пользователя и задавать ему права. Нужно переписать запрос, чтобы права выдавались такими, какими нужны именно вам. Для тестовых целей можно поставить как в данном примере.
  • default_ttl — время, в течение которого будет действовать пароль.
  • max_ttl — время, в течение которого пользователю можно будет обновлять пароль.

Мы должны увидеть что-то на подобие:

Success! Data written to: database/roles/postgresql-create

Готово.

Настраиваем файл pg_hba.conf

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

Открываем файл:

vi /var/lib/pgsql/11/data/pg_hba.conf

* напомню, что путь до нашего файла может быть другим — это зависит от операционной системы и версии postgresql. Посмотреть расположение конфигурационных файлов можно sql-командой SHOW config_file;

В открывшемся редакторе необходимо внести изменения:


# «local» is for Unix domain socket connections only
local   all             dmosk                                   md5
local   all             postgres                                peer
local   all             all                                     md5
##local   all             all                                     peer

* мы добавили строку, разрешающую пользователю postgres логин с локального хоста (local) без запроса пароля; также мы закомментировали строку, которая позволяет вход всем пользователям с локального хоста без пароля и добавили новую, почти, такую же, но требующую ввода логина и пароля.
** это, всего лишь, пример настройки. В вашем случае необходимо руководствоваться политикой безопасности, принятой в компании и требованиями приложения.

Перезапускаем сервис СУБД:

systemctl restart postgresql

* также напомню, что название сервиса может отличаться и это зависит от версии PostgreSQL.

Создаем нового пользователя и проверяем доступ

Создаем временного пользователя командой:

vault read database/creds/postgresql-create

Мы должны увидеть что-то на подобие:

Key                Value
—                ——
lease_id           database/creds/postgresql-create/HMkEz1q6zuaSeyDNBeC8nhDK
lease_duration     1h
lease_renewable    true
password           9oAhg1VIEhleeRA7EU-U
username           v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720

Наши логин и пароль соответственно — v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720 и 9oAhg1VIEhleeRA7EU-U.

Перейдем на сервер с PostgreSQL и попробуем войти в СУБД с использованием этих данных:

psql -U’v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720′ -W template1

Мы должны подключиться с использованием пароля, который получили от Vault.

Hello Postgres

Официальный образ Постгреса очень продвинутый и позволяет настраивать множество параметров. Для быстрого старта большинство из них можно оставить как есть, но вот пароль суперпользователя придётся задать явно:

Эта команда запустит нам контейнер PostgreSQL в фоновом (detached) режиме и присвоит ему имя habr-pg:

Контейнер с PostgreSQL, запущенный в Docker

Классно, не правда ли? А что мы можем делать с этой базой данных? К сожалению, на текущий момент не так уж и много. Через интерфейс Docker можно запустить CLI, подключиться к контейнеру и уже оттуда запустить, например, psql:

Далее я буду использовать сокращенный вариант этой команды:

И тут мы сталкиваемся с первой проблемой: что вернёт нам запрос , выполненный в консоли? Мы не указали явным образом версию БД, которую хотим использовать. Давайте это исправим:

Теперь вопросов об используемой версии БД не возникает, но работать с ней по-прежнему не очень удобно. Нам нужно сделать эту БД доступной извне, чтобы к ней могли подключаться приложения и IDE. Для этого нужно выставить наружу порт:

Отлично! С этого момента к базе данных можно подключиться, например, из IntelliJ IDEA:

Настройка подключения к БД в IntelliJ IDEA

Сейчас мы используем пользователя и базу данных в контейнере, создаваемых по умолчанию, я же предпочитаю указывать их явно. Финальная версия команды для запуска будет иметь вид:

psql можно запустить так:

И соответствующий compose-файл:

Выдача и отзыв привилегий у пользователя

По умолчанию у пользователей нет доступа к операциям над любыми объектами баз данных (схемам, таблицам, функциям и т.д.), владельцами которой они не являются. Для этого пользователям нужно выдать привилегию (право доступа) на объект.

По умолчанию владельцы объекта имеют доступ и все права на объект.

Выдача привилегий пользователю

Выдача привилегий происходит с помощью команды , которая назначает права (привилегии) пользователям на объекты баз данных. Привилегии могут быть следующие: , , , и т.д.

Пример выдачи доступа на чтение () к таблице пользователю :

Подробное описание синтаксиса команды в документации PostgreSQL.

Пример создания пользователя схемы с правами только на чтение

Создадим пользователя с привилегиями: доступ к базе данных кластера, к таблице в схеме по умолчанию и ко всем таблицам схемы. Автоматически все новые таблицы будут создаваться с доступом только на чтение для этого пользователя.

Для создания пользователя схемы с правами только на чтение (read-only) и подключитесь к базе данных.

Затем создайте схему и таблицу:

Выдайте привилегии:

Отзыв привилегий у пользователя

Для отзыва привилегий используется команда , подробное описание синтаксиса команды в документации PostgreSQL.

Пример отзыва привилегии у пользователя на схему :

Установка pgAdmin

pgAdmin — приложение, позволяющее визуализировать работу с базами данных. Её применение не обязательно, но исходя из моего опыта её наличие может сильно облегчить вам жизнь, особенно если вы не привыкли пользоваться консолью на постоянной основе. Скачать установщик данной программы можно либо с официального сайта pgAdmin, либо по этой ссылке. Процедура установки стандартная и при следовании инструкциям установщика проблем быть не должно. При первом запуске pgAdmin вам будет предложено ввести мастер-пароль. Данный пароль необходимо будет запомнить, так как он будет использоваться при подключении к СУБД.

Решение

В 1С (бухгалтерская прога) можно базу подключить к постгресу (ожидается дикий прирост скорости по сравнению с не кешированным файловым хранилищем). Обычно все работают в win-терминалах на ЭТОМ-же компе (один приличный сервер на фирму в 10-20 компов). Далеко не каждый 1Сник умеет (и имеет желание) кроме 1С еще и заниматься линуксом.

А я пытался разобраться с принципами «ролей», чтобы понять как на линукс-сервере организовать «разграничение доступов». Хотел потренироваться сначала на локальной базе с «графическим» редактором/вювером pgAdmin и неожиданно «доступ не урезается». к серверной не получилось подключить pgAmdin

Кстати, можете по линукс (debian) версии проконсультировать? Поставил на хостинг постгрес, успешно работаю ИЗНУТРИ (node-сервер на том-же хостинге), но подключиться с домашнего компа на сервер не получается (под теми-же паролем/пользователем/базой/портом, но с реальным IP хоста) — «could not connect to server: Connection refused»! Это те-же «настройки по дефолту» чтобы снаружи «случайно» не сломали? или у меня где-то руки кривые, а у остальных «работает из коробки»?

пробую разобраться с /etc/postgresql/9.1/main/pg_hba.conf но пока безуспешно.

скопипастить через терминал не получается. буду набирать:

все остальное заремарено.

где-то на форуме предложили добавить:

после каждой модификации пробовал перегрузить через

То есть вы в операционной системе работаете в каком-то своем окружении под пользователем myuser, даете команду оболочке от имени пользователя postgres запустить команду коннект к базе данных через доменный сокет, который расположен в директории /var/lib/postgresql. Пользователь базы данных будет по умолчанию postgres, база данных, к которой подключаетесь, будет по умолчанию тоже postgres.

2 строчка) local = понятно all = понятно all = разрешает доступ всем пользователям (которые созданы в СУБД командой CREATE ROLE/USER или утилитой createuser) md5 = разрешает доступ, только если пользователь прошел проверку своего пароля, указанного при соединении с базой данных (то есть обычная проверка по паролю) Все вместе означает, что эта строчка авторизует коннекты к базе, которые делаются примерно такой командой

В итоге получаем, что Ваш текущий pg_hba.conf разрешает соединения ТОЛЬКО внутри данного сервера всякими разными способами (через unix-сокеты, через tcp/ip v4 и v6).

Чтобы добавить коннект извне (из Интернета) надо добавить примерно следующую строчку

5) строчка host = понятно all = понятно all = понятно 1.2.3.4/24 = IP-адрес и префикс (или плюс маска) того адреса, С КОТОРОГО вы будете соединяться с базой данных (это адрес вашего провайдера). Можно указать 0.0.0.0/0, тогда будет с любого адрес (что может быть НЕБЕЗОПАСНЫМ. ). Вместе с добавлением этой строчки нужно убедиться, что в файле postgresql.conf параметры listen_addresses и port выставлены верно хотя бы так listen_addresses=’*’ port = 5432

Если я где-то ошибся, верную информацию всегда можно найти в оф. документации

Добавлено через 12 минут p.s. Да, надо добавить, что ряд команд, которые я выше упомянул имеют свои особенности применения в разных дистрибутивах linux (в частности sudo, работа которой обычно настраивается отдельно). Также иногда psql требует явного указания параметра -W, который однозначно требует ввода пароля пользователя перед процедурой аутентификации. p.p.s. Также коннекты извне часто ограничиваются файрволами, которые по умолчанию включены в современных дистрибутивах. p.p.p.s. Также может вмешиваться в работу SELinux, если он поднят по умолчанию (например, CentOS).

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

А если хочу изменить параметры БД?

Для администраторов PostgreSQL не секрет, что конфигурация СУБД из коробки далека от идеальной и не очень подходит для эксплуатации. Я немного рассказывал об этом в своей статье про pg-index-health: ряд параметров нужно изменить в обязательном порядке, так как они влияют на производительность. Так же существует большое количество расширений для Постгреса, которые сделают эксплуатацию БД более удобной, наблюдаемой и управляемой. Одно из таких расширений — pg_stat_statements (кстати, оно пригодится нам позднее для мониторинга БД).

Ванильный образ PostgreSQL позволяет тюнить параметры и добавлять расширения на старте контейнера БД:

Разумеется, можно указать свой postgresql.conf. Оставлю это в качестве домашнего задания.

Посмотреть список установленных расширений можно с помощью запроса .

А команда show позволит узнать текущее значение того или иного параметра, например: .

3 ответа

23

(Примечание

Это не очень важно для читателей, использующих PostgreSQL 9.2 или выше, из установщиков EDB, которые теперь имеют значительно упрощенную установку по умолчанию , используя , хотя вы можете настроить другие учетные записи)

Сброс (или попытка сброса) пароля учетной записи службы. PostgreSQL не запускается в качестве администратора по соображениям безопасности, и установщик обычно устанавливает его с учетной записью пользователя postgres в PostgreSQL 9.1 и старше 1 . В Windows вы не можете запустить службу как пользователь, не сохраняя пароль пользователя в реестре, так что это делает установщик.

Если вы измените пароль для учетной записи пользователя Windows , служба PostgreSQL больше не сможет запускаться. Так что не делайте этого, вам нужно будет исправить конфигурацию службы, чтобы сохранить обновленный пароль.

К счастью, я думаю, что другая ошибка помешала вам сделать это. Похоже, что вы, вероятно, запускаете свою командную строку, не используя «Запуск от имени администратора» в непривилегированной учетной записи пользователя Windows или машине с UAC, поэтому она не работает с правами доступа, необходимыми для изменения пароля для .

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

Скорее всего, вы просто пытаетесь войти в базу данных. Для этого вы используете (к сожалению, полностью несвязанный) пароль, хранящийся в базе данных сам. Поскольку вы потеряли /забыли, вам придется его сбросить:

  • Найдите , обычно в
  • При необходимости установите для него разрешения, чтобы вы могли его изменить; ваша учетная запись пользователя может оказаться неспособной сделать это, пока вы не включите вкладку безопасности в диалоговом окне свойств, чтобы получить это право, используя переопределение администратора. В качестве альтернативы найдите в меню «Пуск» блокнот /блокнот ++, выберите «Запуск от имени администратора», затем нажмите «Файл» и «Открыть», чтобы открыть ).
  • Отредактируйте его, чтобы установить строку «хозяина» для пользователя «postgres» на хосте «127.0.0.1/32» для «доверия». Вы можете добавить строку, если ее нет; просто вставьте:

    перед любые другие строки. (Вы можете игнорировать комментарии, строки, начинающиеся с ).

  • Перезапустите службу PostgreSQL с панели управления Services (start-> run-> )

  • подключиться с помощью psql или PgAdmin-III или любого другого, что вы предпочитаете
  • удалите строку, добавленную в , или измените ее.
  • снова перезапустите PostgreSQL.

Смотрите: Как сбросить пароль postgres для PostgreSQL в Windows?

1. 9.2 теперь использует учетную запись , которая не требует пароля, поэтому эта проблема уходит .

3

Вам нужно различать пользователя вашей системы (Windows), называемого «postgres», и пользователя базы данных с тем же именем.

Найдите файл pg_hba.conf — это контролирует доступ к серверу PostgreSQL. Вам нужно будет отредактировать его как пользователя с правами администратора. Посмотрите на строки, в которых упоминается пользователь «postgres», и временно установите режим «trust». Перезапустите postgresql, а затем вы сможете подключиться без пароля. Сбросьте пароль, затем верните исходный файл и перезапустите PostgreSQL.

1

Если кто-то еще сталкивается с этой проблемой, а также используя pgAdmin, я предлагаю вам взглянуть на это: http://www.homebrewandtechnology.com/blog/graphicallychangepostgresadminpassword

Настройка прав PostgreSQL

На сервере PostgreSQL нам необходимо:

  1. Задать пароль для пользователя postgres.
  2. Создать пользователя, пароль для которого мы будем хранить в Vault.
  3. Разрешить подключение к базе данных для postgres и созданного пользователя.
  4. Открыть порт 5432 для удаленного подключения.
  5. Проверить доступы.

Рассмотрим действия по шагам.

1. Задаем пароль для postgres

Данные действия необходимы, если мы не задавали пароль для пользователя postgres или мы не знаем данный пароль.

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

Заходим под пользователем postgres и подключаемся к СУБД:

su — postgres

$ psql 

Вводим:

=# ALTER USER postgres PASSWORD ‘password’;

* в данном примере мы задаем пароль password для пользователя postgres.

2. Создаем нового пользователя

На данном шаге мы создадим пользователя, для которого и будем хранить секрет в Vault. В рамках примера мы не будем его предоставлять никаких доступов. Для нас достаточно, чтобы мы могли подключиться и удостовериться, что пароль будет меняться.

В той же командной оболочке postgresql вводим:

=# CREATE USER dmosk WITH PASSWORD ‘myPassword’;

* с помощью данной команды мы создадим пользователя dmosk с паролем myPassword.

3. Разрешаем подключение к СУБД

Нам необходимо разрешить подключаться к базе данных пользователю dmosk (создали на шаге 2) с локального компьютера и пользователю postgres с сервера Vault. Это делается посредством редактирования файла pg_hba.conf.

Но размещение этого файла может быть разным — это зависит от версии установленного PostgreSQL. Вводим команду:

=# SHOW config_file;

Данная команда нам покажет место размещения конфигурационного файла postgresql.conf — в этом же каталоге находятся и другие конфигурационные файлы. Например, если команда показала:

—————————————-
 /var/lib/pgsql/11/data/postgresql.conf
(1 row)

… то значит нужный нам файл в каталоге /var/lib/pgsql/11/data.

Выходим из командной оболочки psql:

=# \q

Разлогиниваемся из-под пользователя postgres:

$ exit

И вводим:

vi /var/lib/pgsql/11/data/pg_hba.conf

* где /var/lib/pgsql/11/data — путь, который мы получили с помощью sql-команды SHOW config_file.

В данном файле мы должны добавить 2 строки:


# «local» is for Unix domain socket connections only
local   all             dmosk                                   md5

# IPv4 local connections:
host    all             postgres        192.168.1.20/32         md5

* где 192.168.1.20 — IP-адрес предполагаемого сервера Vault, с которого мы будем подключаться под пользователем postgres.

Открываем конфигурационный файл:

vi /var/lib/pgsql/11/data/postgresql.conf

Приводим опцию listen_addresses к виду:

listen_addresses = ‘*’

* в данном примере мы настроили, чтобы postgresql слушал запросы на всех сетевых интерфейсах. При необходимости. мы можем ограничить их число вводом конкретного адреса.

Перезапускаем службу СУБД:

 systemctl restart postgresql

* команда для перезапуска PostgreSQL может отличаться и зависит от версии СУБД.

4. Настраиваем межсетевой экран

Для подключения к серверу баз данных по сети, нам необходимо открыть порт 5432.

Как правило, в CentOS используется firewalld, как средство управления брандмауэром. Вводим:

firewall-cmd —permanent —add-port=5432/tcp

firewall-cmd —reload

5. Делаем проверку

Убедимся, что наши учетные записи имеют права для подключения к базе данных.

На сервере с СУБД вводим:

psql -Udmosk -W template1

* в данном примере мы подключаемся к локальному хосту под пользователем dmosk.

Система запросит пароль — вводим тот, что задали при создании нашего пользователя. Мы должны попасть в оболочку psql.

Теперь подключаемся по SSH на сервер Vault. Нам придется установить на него клиента postgresql.

а) На системы RPM (Rocky Linux, CentOS):

yum install postgresql

б) На Deb (Ubuntu, Debian):

apt install postgresql

После установки можно подключаться к нашему серверу с помощью команды psql.

Вводим:

psql -h192.168.1.15 -Upostgres -W

* в данном примере мы подключимся к серверу 192.168.1.15 под учетной записью postgres.

Консоль у нас запросит пароль — вводим тот, что задали для пользователя postgres. В итоге мы должны подключиться к серверу:

postgres=#

Выходим из SQL-оболочки:

postgres=# \q

… и переходим к настройке Vault.