PostgreSQL - Привилегии
Всякий раз, когда объект создается в базе данных, ему назначается владелец. Владелец обычно тот, кто выполнил оператор создания. Для большинства видов объектов начальное состояние таково, что только владелец (или суперпользователь) может изменять или удалять объект. Чтобы разрешить другим ролям или пользователям использовать его, должны быть предоставлены привилегии или разрешения.
Различные виды привилегий в PostgreSQL:
- SELECT,
- INSERT,
- UPDATE,
- DELETE,
- TRUNCATE,
- REFERENCES,
- TRIGGER,
- CREATE,
- CONNECT,
- TEMPORARY,
- EXECUTE, and
- USAGE
В зависимости от типа объекта (таблица, функция и т. д.) к нему применяются привилегии. Для назначения привилегий пользователям используется команда GRANT.
Синтаксис для GRANT
Базовый синтаксис команды GRANT выглядит следующим образом:
GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
- privilege – значения могут быть следующими: SELECT, INSERT, UPDATE, DELETE, RULE, ALL;
- object – имя объекта, которому предоставляется доступ. Объекты могут быть следующими: таблица, представление, последовательность;
- PUBLIC – сокращенное название для всех пользователей;
- group – группа, которой предоставляются привилегии;
- username – Имя пользователя, которому предоставляются привилегии.
Привилегии отзываются с помощью команды REVOKE.
Синтаксис для REVOKE
Базовый синтаксис для команды REVOKE:
REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }
- privilege – значения могут быть следующими: SELECT, INSERT, UPDATE, DELETE, RULE, ALL;
- object – имя объекта, которому предоставляется доступ. Объекты могут быть следующими: таблица, представление, последовательность;
- PUBLIC – сокращенное название для всех пользователей;
- group – группа, которой предоставляются привилегии;
- username – Имя пользователя, которому предоставляются привилегии.
Пример
Для того чтобы понять, что такое привилегии, создадим пользователя следующим способом:
testdb=# CREATE USER manisha WITH PASSWORD 'password'; CREATE ROLE
Сообщение CREATE ROLE означает, что создан пользователь "manisha".
Рассмотрим таблицу COMPANY:
testdb# select * from COMPANY; id | name | age | address | salary ----+-------+-----+-----------+-------- 1 | Paul | 32 | California| 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall| 45000 7 | James | 24 | Houston | 10000 (7 rows)
Дадим пользователю "manisha" все привилегии касательно таблицы COMPANY:
testdb=# GRANT ALL ON COMPANY TO manisha; GRANT
Сообщение GRANT свидетельствует о том, что пользователю предоставлены все привилегии.
Теперь отзовем у "manisha" все привилегии:
testdb=# REVOKE ALL ON COMPANY FROM manisha; REVOKE
Сообщение REVOKE означает, что у пользователя отозваны все привилегии.
Вы даже можете удалить этого пользователя:
testdb=# DROP USER manisha; DROP ROLE
Сообщение DROP ROLE означает, что пользователь ‘Manisha’ удален из базы данных.



