LINUX.ORG.RU
решено ФорумAdmin

Права в postgresql

 


0

1

Установил postgresql и phppgadmin (на разных хостах). Создал две БД, двух пользователей:

create database db1;
create database db2;
CREATE USER user1 WITH password 'pswd1';
CREATE USER user2 WITH password 'pswd2';
ALTER DATABASE db1 OWNER TO user1;
ALTER DATABASE db2 OWNER TO user2;

В pg_hba.conf указано

#host   all             all             1.2.3.4/32             md5
#host   all             all             1.2.3.5/32             md5

host   user1             db1             1.2.3.0/24             md5
host   user2             db2             1.2.3.0/24             md5
При обращении с хоста на котором phppgadmin через psql с указанием логина и базы к которой подключаться, подключение происходит нормально. При обращении через phppgadmin происходит попытка подключения к базе заданной в config.inc.php:
        $conf['servers'][0]['defaultdb'] = 'template1';
Как и следует ожидать, подключение не происходит.

Если изменить pg_hba.conf (закомментировать последние строки и снять комментарий с первых) то подключение происходит и все могут видеть любую базу и создавать в любой базе таблицу. Есть впечатление что это связано с некой схемой public.

В phppgadmin нет поля ввода базы данных. Мне в pg_hba.conf задать права для всех на template1? Это не будет неправильным? Или нужны какие либо манипуляции со схемами?

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

★★★★★

  • В /etc/postgresql/9.6/main/postgresql.conf выставить listen_addresses = '*'
  • В pg_hba.conf лучше сделать host all all 0.0.0.0/0 md5 разрешив все подключения
  • Если нужна безопасность, разрешить подключения через фаерволл на уровне белых списков либо спрятаться за приватной сетью
  • Схемы в постгресе - это что-то типа пространства имен. Например, ты можешь иметь две таблицы с одинаковым названием, но в разых схемах, но тогда надо указывать схему явно в названии таблицы: SELECT * FROM schema_name.table_name.

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

nikolnik ★★★
()
Последнее исправление: nikolnik (всего исправлений: 1)
Ответ на: комментарий от nikolnik

Судя по http://postgresql.ru.net/manual/ddl-schemas.html (5.7.6. Примеры использования), нужно поставить all all, а разграничивать удалив public и создавая схему на каждую пару база-пользователь. Если же понадобится создавать дополнительного пользователя для доступа к некой таблице, то видимо придётся обращаться по полной форме: база.схема.таблица

sin_a ★★★★★
() автор топика
Ответ на: комментарий от theNamelessOne

Он предназначен не для одной базы а для разных. Нет возможности указать одну для всех случаев. А это — значение по умолчанию.

sin_a ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.