@zlodiak

Почему пользователю БД не назначаются права?

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

CREATE DATABASE joba_finder;

Создаю пользователя:

CREATE USER jf_user WITH PASSWORD 'qwerty';

И назначаю ему все привилегии над этой ДБ:

GRANT ALL PRIVILEGES ON DATABASE joba_finder to jf_user


Но в результате в списке БД нет в столбце access информации о том, что все привилегии работы в этой БД есть у пользователя jf_user:

joba_finder-# \l
                                   List of databases
    Name     |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-------------+----------+----------+-------------+-------------+-----------------------
 joba_finder | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 postgres    | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 template0   | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
             |          |          |             |             | postgres=CTc/postgres
 template1   | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
             |          |          |             |             | postgres=CTc/postgres
 test        | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | 
(5 rows)


Помогите пожалуйста исправить это.
  • Вопрос задан
  • 669 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
postgres=# CREATE DATABASE joba_finder;
CREATE DATABASE
postgres=# CREATE USER jf_user WITH PASSWORD 'qwerty';
CREATE ROLE
postgres=# \l joba_finder 
                               Список баз данных
     Имя     | Владелец | Кодировка | LC_COLLATE  |  LC_CTYPE   | Права доступа 
-------------+----------+-----------+-------------+-------------+---------------
 joba_finder | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | 
(1 строка)

postgres=# GRANT ALL PRIVILEGES ON DATABASE joba_finder to jf_user;
GRANT
postgres=# \l joba_finder 
                                   Список баз данных
     Имя     | Владелец | Кодировка | LC_COLLATE  |  LC_CTYPE   |     Права доступа     
-------------+----------+-----------+-------------+-------------+-----------------------
 joba_finder | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/postgres         +
             |          |           |             |             | postgres=CTc/postgres+
             |          |           |             |             | jf_user=CTc/postgres
(1 строка)

postgres=# select version();
                                                version                                                 
--------------------------------------------------------------------------------------------------------
 PostgreSQL 11.2 (Debian 11.2-2) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-2) 8.3.0, 64-bit
(1 строка)

Just works. Настройками это не регулируется, так что проверяйте что вы делаете не так. Может быть не коммитите транзакцию с grant? Не знаю.

Не заметил:

joba_finder-# \l

Внимание на -# так где должен быть =# - метка указывает, что вы начали писать запрос, но не завершили его. psql команды вроде \l при этом всё ещё обрабатываются.
postgres=# select
postgres-# \l joba_finder 
                                   Список баз данных
     Имя     | Владелец | Кодировка | LC_COLLATE  |  LC_CTYPE   |     Права доступа     
-------------+----------+-----------+-------------+-------------+-----------------------
 joba_finder | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/postgres         +
             |          |           |             |             | postgres=CTc/postgres+
             |          |           |             |             | jf_user=CTc/postgres
(1 строка)

postgres-# 1;
 ?column? 
----------
        1
(1 строка)

Как пример psql команды в середине написания select 1;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы