Пример. Создание представления базы данных в PostgreSQL с помощью SQL

Для отображения таблиц и классов пространственных объектов многопользовательской базы геоданных можно использовать SQL.

Приведенные в настоящей теме примеры показывают, как создать в PostgreSQL простое представление для просмотра с ограничением доступа пользователей к другим столбцам. Этот пример построен на базе таблицы со следующим определением:

CREATE TABLE employees(emp_id integer not null, name varchar(32),
department smallint not null, hire_date timestamp without time zone not null

Предоставление прав доступа к таблице

Если создающий представление пользователь не является владельцем таблицы или таблиц в этом представлении, владелец таблиц должен предоставить создателю как минимум права доступа Select. Если владетелю предоставления требуется возможность передачи прав доступа к представлению другим пользователям, владелец таблицы должен предоставить владельцу представления права передачи прав доступа другим пользователям.

В данном примере таблица, на базе которой построено представление (employees), принадлежит пользователю gdb. Представление создается пользователем rocket. также пользователю rocket требуется возможность предоставления прав доступа к представлению другим пользователям. Таким образом, пользователь gdb должен передать пользователю rocket права доступа SELECT и WITH GRANT OPTION, чтобы пользователь rocket мог передавать другим пользователям права доступа SELECT.

psql testdb gdb
Enter password for user gdb:

GRANT SELECT ON gdb.employees TO rocket WITH GRANT OPTION;

Создание представления.

В этом примере пользователь rocket создает представление таблицы employees и ограничивает доступ к нему только пользователям из отдела 201:

psql testdb rocket
Enter password for user rocket:

CREATE VIEW view_dept_201
AS SELECT emp_id, name, hire_date
FROM gdb.employees 
WHERE department = 201;

Предоставление прав доступа к представлению

Права доступа к представлению можно предоставлять определенным пользователям, не передавая им права доступа к базовой таблице (employees). В данном примере пользователю mgr200 предоставлены права доступа SELECT к представлению view_dept_201:

GRANT SELECT ON rocket.view_dept_201 TO mgr200;

Тестовые права доступа

Войдите в систему как mgr200 и выберите записи view_dept_201:

psql testdb mgr200
Enter password for mgr200:

SELECT * FROM rocket.view_dept_201; 

emp_id   name        hire_date 
112      LOLLI POP   2007-06-30 08:44:38
134      VAN CHIN    2007-10-15 07:41:20
150      DON GUN     2009-03-01 15:39:05

Как ожидалось, выводятся только записи для сотрудников отдела 201.

9/11/2013