Запрос для получения списка привилегий пользователя для данной таблицы не выводит всех пользователей - PullRequest
0 голосов
/ 27 апреля 2020

Я учусь Postgres. Теперь я проверяю такие вещи, как права пользователя. После создания роли Business я добавил в таблицу employee следующее GRANT:

GRANT SELECT ("fname", "minit", "lname", "bdate", "address", "dno") on employee TO business;

Это таблица:

  fname   | minit |  lname  |    ssn    |   bdate    |         address         | sex |  salary  | super_ssn | dno 
----------+-------+---------+-----------+------------+-------------------------+-----+----------+-----------+-----
 James    | E     | Borg    | 888665555 | 1937-11-10 | 450 Stone, Houston TX   | M   | 55000.00 |           |   1
 John     | B     | Smith   | 123456789 | 1965-01-09 | 731 Fondren, Houston TX | M   | 30000.00 | 333445555 |   5
 Franklin | T     | Wong    | 333445555 | 1955-12-08 | 638 Voss, Houston TX    | M   | 40000.00 | 888665555 |   5
 Alicia   | J     | Zelaya  | 999887777 | 1968-01-19 | 3321 Castle, Spring TX  | F   | 25000.00 | 987654321 |   4
 Jennifer | S     | Wallace | 987654321 | 1941-06-20 | 291 Berry, Bellaire TX  | F   | 43000.00 | 888665555 |   4
 Ramesh   | K     | Narayan | 666884444 | 1962-09-15 | 975 Fire Oak, Humble TX | M   | 38000.00 | 333445555 |   5
 Joyce    | A     | English | 453453453 | 1972-07-31 | 5631 Rice, Houston TX   | F   | 25000.00 | 333445555 |   5
 Ahmad    | V     | Jabbar  | 987987987 | 1969-03-29 | 980 Dallas, Houston TX  | M   | 25000.00 | 987654321 |   4

I Я нашел несколько потоков здесь на StackOverflow с некоторыми примерами, но они не достигают того, что я ищу.

Когда я использую

SELECT user, string_agg(privilege_type, ', ') AS privileges
FROM information_schema.role_table_grants 
WHERE table_name='employee'   
GROUP BY user;

, я получаю следующее:

 user  |                          privileges                           
-------+---------------------------------------------------------------
 Admin | INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER

Новая роль с именем Business не отображается. Он работает с \z employee, но этот тип просмотра не тот, который я ищу, я хочу запрос.

Я что-то пропустил?

1 Ответ

2 голосов
/ 27 апреля 2020

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

Вы должны были бы заглянуть в information_schema.role_column_grants:

SELECT grantee,
       column_name,
       string_agg(privilege_type, ', ') AS privileges
FROM information_schema.role_column_grants 
WHERE table_name='employee'   
GROUP BY grantee, column_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...