2013-04-10 4 views
2

Как проверить, что пользователь и пароль postgresql действительны без существования базы данных?Аутентификация пользователя и пароля PostgreSQL без базы данных

Я создаю автоматическую установку, которая создаст базу данных и запустит sql-скрипты для создания таблиц. Перед запуском скриптов необходимо установить подлинность пользователя и пароль. Автоматическая установка вызывает пакетные файлы Windows. Сначала я установил пароль, установил PGPASSWORD=mypassword.

После установки пароля какая команда может аутентифицировать пользователя и пароль и вернуть код ошибки или сообщение?

Другие программы баз данных (например, IBM и db2) имеют команду attach, которая позволяет пользователю присоединяться к серверу или экземпляру без указания имени db. Я не могу найти эквивалент PostgreSQL.

Как мне войти в PostgreSQL в командной строке без указания имени базы данных?

+1

Postgres всегда устанавливает базу данных с именем 'Postgres'. Используйте это с ответом @Eric, и все будет в порядке. – mistapink

ответ

3

Используйте таблицу системы pg_roles

Postgres всегда устанавливает базу данных с именем "Postgres". postgres - это база данных, к которой вы подключаетесь, когда вы не подключаетесь к базе данных. В таблице есть pg_roles.

Используйте эту команду:

psql -U pgadmin -d postgres -c 'select * from pg_roles' 

Который возвращает это:

rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid 
----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+------- 
postgres | t  | t   | t    | t   | t   | t   | t    |   -1 | ******** |    |   | 10 
pgadmin | t  | t   | t    | t   | t   | t   | t    |   -1 | ******** |    |   | 16384 

(2 строки)

Смотрите этот ответ: How to check if a postgres user exists?

Попробуй, войдя в

Просто попробуйте войти в систему с предоставленным именем пользователя/паролем и окружить его с помощью try/catch, и если вы сможете войти в систему, то это действительно, в противном случае оно недействительно.

Изменяя пользователя

Вы можете быть в состоянии поймать сообщение об ошибке, если изменить пользователя, который не существует: http://www.postgresql.org/docs/8.0/static/sql-alteruser.html

ALTER USER postgres WITH PASSWORD 'tmppassword'; 

Удаление и повторное добавление пользователя

Возможно, вы попытаетесь удалить сообщение об ошибке, если попытаетесь удалить и повторно добавить пользователя. Поэтому, если он был недействителен, тогда при попытке удалить не-пользователя возникла бы ошибка. http://www.postgresql.org/docs/8.0/static/sql-createuser.html

+0

Итак, вы хотите проверить, что пользователи действительны до того, как будут настроены системные таблицы postgresql? Это кажется странным, но все в порядке. –

+0

Автоматическая установка создает новую базу данных, затем запускает скрипты для создания таблиц и загрузки данных. Экран запрашивает учетные данные и требует аутентификации, прежде чем он вызовет команду createdb. Нет необходимости запускать дополнительные команды с неправильными учетными данными. Это стандартная практика для установки баз данных. –

+0

Вход в PostgreSQL: Другие db-программы (например, IBM db2) имеют команду attach, которая позволяет пользователю присоединяться к серверу или экземпляру без указания имени db. Я не могу найти эквивалент PostgreSQL. Как мне войти в PostgreSQL в командной строке без указания имени базы данных? –

1

Вот удобный способ проверить, является ли комбинация имени пользователя/пароля действительной из командной строки. Это извлекается из модуля puppetlabs-PostGreSQL:

su - username 
env PGPASSWORD=somepass psql -h localhost -c 'select 1' 
echo $? 

... где «somepass» это пароль тестируется и «имя пользователя» является учетной записью испытывается против (как правило, сам пользователь Postgres).

Если $? 0, комбинация пользователь/пароль действительна. Если $? 1, пароль неправильный или пользователь не существует. В любом случае, есть проблема.

Это путь Linux/bash. Путь Windows, что-то вдоль линий:

(run under the user account you're interested in) 

set PGPASSWORD=somepass 
psql -h localhost -c 'select 1' 

if errorlevel 1 (
    echo Failure Reason Given is %errorlevel% 
    exit /b %errorlevel% 
) 

-h на PSQL заставляет локальный TCP-соединение, которое по умолчанию (от pg_hba.conf) заставляет проверку пароля без возможности что Беспарольных пользователей могут байпас.

Приносим извинения за неуплату полностью протестированного решения Windows, но есть вероятность, что код, указанный выше, будет работать напрямую или будет с небольшим исправлением.

-1

Просто используйте эту команду в терминале:

psql postgres 
+0

Это не работает. –

Смежные вопросы