powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Странности с REVOKE для одного поля таблицы
3 сообщений из 3, страница 1 из 1
Странности с REVOKE для одного поля таблицы
    #39255237
shrdlu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим, созданы таблица t1 и пользователь test

Код: plsql
1.
2.
3.
4.
5.
6.
7.
psql (9.5.3)
Введите "help", чтобы получить справку.

postgres=# create user test;
CREATE ROLE
postgres=# create table t1 (i int, data1 int, data2 text);
CREATE TABLE



Даем пользователю test все привилегии на таблицу t1:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
postgres=# grant all on t1 to test;
GRANT
postgres=# \dp+
                                 Права доступа
 Схема  | Имя  |   Тип   |    Права доступа    | Права для столбцов | Политики
--------+------+---------+---------------------+--------------------+----------
 public | t1   | таблица | pgsql=arwdDxt/pgsql+|                    |
        |      |         | test=arwdDxt/pgsql  |                    |
(1 строка)



Права выданы.
А теперь отберем у test право делать update полю data1 в таблице t1

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
postgres=# revoke update (data1) on test from test;
REVOKE
postgres=# \dp+
                                 Права доступа
 Схема  | Имя  |   Тип   |    Права доступа    | Права для столбцов | Политики
--------+------+---------+---------------------+--------------------+----------
 public | t1   | таблица | pgsql=arwdDxt/pgsql+|                    |
        |      |         | test=arwdDxt/pgsql  |                    |
(1 строка)


Права не поменялись!
Пойдём другим путём. Отзовём все права и выдадим заново, но по-другому:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
postgres=# revoke all on t1 from test;
REVOKE
postgres=# \dp+
                                 Права доступа
 Схема  | Имя  |   Тип   |    Права доступа    | Права для столбцов | Политики
--------+------+---------+---------------------+--------------------+----------
 public | t1   | таблица | pgsql=arwdDxt/pgsql |                    |
(1 строка)

postgres=# grant select, insert, delete on t1 to test;
GRANT
postgres=# grant update (i, data2) on t1 to test;
GRANT
postgres=# \dp+
                                 Права доступа
 Схема  | Имя  |   Тип   |    Права доступа    | Права для столбцов | Политики
--------+------+---------+---------------------+--------------------+----------
 public | t1   | таблица | pgsql=arwdDxt/pgsql+| i:                +|
        |      |         | test=ard/pgsql      |   test=w/pgsql    +|
        |      |         |                     | data2:            +|
        |      |         |                     |   test=w/pgsql     |
(1 строка)



Права распределились как задумано, хотя и долгим путём.
А теперь - ВНИМАНИЕ:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
postgres=# revoke update (i) on test from test;
REVOKE
postgres=# \dp+
                                 Права доступа
 Схема  | Имя  |   Тип   |    Права доступа    | Права для столбцов | Политики
--------+------+---------+---------------------+--------------------+----------
 public | test | таблица | pgsql=arwdDxt/pgsql+| data2:            +|
        |      |         | test=ard/pgsql      |   test=w/pgsql     |
(1 строка)



Вопрос: почему не работает
Код: plsql
1.
 revoke update (data1) on t1 from test;

сразу после
Код: plsql
1.
grant all on t1 to test;

и запрещать обновлять единственное поле надо через явное разрешение других полей, хотя, как видим, вполне себе работает и отзыв права по единственному полю?
...
Рейтинг: 0 / 0
Странности с REVOKE для одного поля таблицы
    #39255270
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shrdlu,

Как пишут в доках , REVOKE забирает привилегии, которые были выданы ранее посредством GRANT. Если такой привилегии нет, то никаких ошибок или предупреждений не выдайтся.
Там же — если роли были даны привилегии на таблицу, то "забирание" привилегий на отдельные колонки ничего не меняет.

В вашем случае надо явным образом указать те колонки, которые вы хотите позволить править, не давая привилегий на всю таблицу.
...
Рейтинг: 0 / 0
Странности с REVOKE для одного поля таблицы
    #39255354
shrdlu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovshrdlu,
если роли были даны привилегии на таблицу, то "забирание" привилегий на отдельные колонки ничего не меняет.
Как всегда, пропустил ключевой момент :(
Спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Странности с REVOKE для одного поля таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]