PostgreSQL PRIVILEGES (права доступа)
Всякий раз, когда создаётся объект базы данных, ему назначается владелец, который обычно является лицом, выполнившим оператор CREATE.
Для большинства типов объектов исходное состояние таково, что только владелец (или суперпользователь) может изменять или удалять объект. Чтобы разрешить другим ролям или пользователям использовать его, для этого пользователя необходимо установить права доступа.
В PostgreSQL привилегии делятся на следующие типы:
- SELECT
- INSERT
- UPDATE
- DELETE
- TRUNCATE
- REFERENCES
- TRIGGER
- CREATE
- CONNECT
- TEMPORARY
- EXECUTE
- USAGE
В зависимости от типа объекта (таблица, функция и т. д.) указанные привилегии применяются к этому объекту.
Чтобы назначить привилегии пользователю, можно использовать команду GRANT.
Синтаксис GRANT
Базовый синтаксис команды GRANT выглядит следующим образом:
GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
- privilege − Значение может быть: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.
- object − Имя объекта, к которому предоставляется доступ. Возможные объекты включают: table, view, sequence.
- PUBLIC − Представляет всех пользователей.
- GROUP group − Предоставляет привилегии группе пользователей.
- username − Имя пользователя, которому предоставляются привилегии. PUBLIC — это краткая форма, представляющая всех пользователей.
Кроме того, мы можем использовать команду REVOKE для отзыва привилегий. Синтаксис REVOKE:
REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }
Пример
Чтобы понять привилегии, создайте пользователя:
exampledb=# CREATE USER example WITH PASSWORD 'password'; CREATE ROLE
Сообщение CREATE ROLE указывает, что пользователь "example" был создан.
Пример
Создайте таблицу COMPANY (Скачать SQL-файл COMPANY), содержимое данных следующее:
exampledb# 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)
Теперь назначьте привилегии пользователю "example":
exampledb=# GRANT ALL ON COMPANY TO example; GRANT
Сообщение GRANT указывает, что все привилегии были назначены "example".
Далее отзовите привилегии пользователя "example":
exampledb=# REVOKE ALL ON COMPANY FROM example; REVOKE
Сообщение REVOKE указывает на то, что привилегии пользователя были отозваны.
Вы также можете удалить пользователя:
exampledb=# DROP USER example; DROP ROLE
Сообщение DROP ROLE указывает на то, что пользователь "example" был удалён из базы данных.
Другие расширения