Thread: [pgsql-ru-general] сменить пароли/доступы к БД без даунтайма

Имеется следующая структура

1. Pg
2. N бакендов с разных хостов ходящих в БД с выбранным login/passwod
3. M бакендов с разных хостов ходящих туда же но через pgbouncer

задача сменить login/password юзеру от имени которого они все ходят
(все от одного ходят)

вопрос как правильно сделать?

создать еще одного юзера и потихоньку переводить бакенды на него? не
будет ли тут каких камней подводных в том что некоторое время
несколько юзеров будут в одну и ту же БД писать?
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment
Привет.

6 марта 2017 г., в 14:50, Dmitry E. Oboukhov <unera@debian.org> написал(а):


Имеется следующая структура

1. Pg
2. N бакендов с разных хостов ходящих в БД с выбранным login/passwod
3. M бакендов с разных хостов ходящих туда же но через pgbouncer

задача сменить login/password юзеру от имени которого они все ходят
(все от одного ходят)

вопрос как правильно сделать?

создать еще одного юзера и потихоньку переводить бакенды на него? не
будет ли тут каких камней подводных в том что некоторое время
несколько юзеров будут в одну и ту же БД писать?

Не будет, если раздать одинаковые grant’ы обоим пользователям. Мы ровно так и делаем регулярно. Больно, но способа лучше, кажется, пока нет.

--
Да пребудет с вами сила…

>> создать еще одного юзера и потихоньку переводить бакенды на него? не
>> будет ли тут каких камней подводных в том что некоторое время
>> несколько юзеров будут в одну и ту же БД писать?

> Не будет, если раздать одинаковые grant’ы обоим пользователям. Мы ровно так и
> делаем регулярно. Больно, но способа лучше, кажется, пока нет.


И вот непонятно мне как задать правильно гранты.

У меня было так:

CREATE ROLE $user PASSWORD $password;
CREATE DATABASE $db WITH OWNER $user;


теперь я хочу еще одного юзера который ходит в ту же БД:

CREATE ROLE $newuser PASSWORD $newpassword;
GRANT ALL PRIVILEGES ON DATABASE $db TO $newuser WITH GRANT OPTION ADMIN;

И новый юзер коннектится итп, но при попытке что-то сделать скажем с
индексами или еще чем, получается такая ошибка:

db=> DROP INDEX CONCURRENTLY tmp;
ERROR:  must be owner of relation tmp

какие еще гранты дать чтобы заменить юзера $user на $newuser (при том
что некоторое время они должны мочь поработать одновременно)?
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment
>> Не будет, если раздать одинаковые grant’ы обоим пользователям. Мы ровно так и
>> делаем регулярно. Больно, но способа лучше, кажется, пока нет.

> И вот непонятно мне как задать правильно гранты.

все разобрался

GRANT $olduser TO $newuser;
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment
> 19 марта 2017 г., в 20:00, Dmitry E. Oboukhov <unera@debian.org> написал(а):
> 
>>> Не будет, если раздать одинаковые grant’ы обоим пользователям. Мы ровно так и
>>> делаем регулярно. Больно, но способа лучше, кажется, пока нет.
> 
>> И вот непонятно мне как задать правильно гранты.
> 
> все разобрался
> 
> GRANT $olduser TO $newuser;
> -- 
> 
> . ''`.                               Dmitry E. Oboukhov
> : :’  :   email: unera@debian.org jabber://UNera@uvw.ru
> `. `~’              GPGKey: 1024D / F8E26537 2006-11-21
>  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Как раз сегодня занимался тем же. Но схема была несколько иная: 
create role newuser login inherit password 'pass'
grant olduser to newuser

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