Привилегии выполнения
Выполнение SQL кода представлений всегда осуществляется с привилегиями определяющего пользователя (владельца).
Выполнение SQL кода представлений всегда осуществляется с привилегиями определяющего пользователя (владельца).
Выполнить оператор CREATE VIEW
могут:
Пользователи с привилегией CREATE VIEW
.
Пользователь, создавший представление, становится его владельцем.
Для создания представления пользователями, которые не имеют административных привилегий, необходимы также привилегии на чтение (SELECT
) данных из базовых таблиц и представлений, и привилегии на выполнение (EXECUTE
) используемых селективных хранимых процедур.
Для разрешения вставки, обновления и удаления через представление, необходимо чтобы создатель (владелец) представления имел привилегии INSERT
, UPDATE
и DELETE
на базовые объекты метаданных.
Предоставить привилегии на представление другим пользователям возможно только если владелец представления сам имеет эти привилегии на базовых объектах.Она будет всегда, если владелец представления является владельцем базовых объектов метаданных.
CREATE VIEW ENTRY_LEVEL_JOBS AS
SELECT JOB_CODE, JOB_TITLE
FROM JOB
WHERE MAX_SALARY < 15000;
Создание представления возвращающего столбцы JOB_CODE и JOB_TITLE только для тех работ, где MAX_SALARY меньше $15000.При вставке новой записи или изменении существующей будет осуществляться проверка условия MAX_SALARY < 15000, если условие не выполняется, то вставка/изменение будет отвергнуто.
CREATE VIEW ENTRY_LEVEL_JOBS AS
SELECT JOB_CODE, JOB_TITLE
FROM JOB
WHERE MAX_SALARY < 15000
WITH CHECK OPTIONS;
CREATE VIEW PRICE_WITH_MARKUP (
CODE_PRICE,
COST,
COST_WITH_MARKUP
) AS
SELECT
CODE_PRICE,
COST,
COST * 1.1
FROM PRICE;
CREATE VIEW PRICE_WITH_MARKUP AS
SELECT
CODE_PRICE,
COST,
COST * 1.1 AS COST_WITH_MARKUP
FROM PRICE;
CREATE VIEW GOODS_PRICE AS
SELECT
goods.name AS goodsname,
price.cost AS cost,
b.quantity AS quantity
FROM
goods
JOIN price ON goods.code_goods = price.code_goods
LEFT JOIN sp_get_balance(goods.code_goods) b ON 1 = 1;
-- базовые таблицы
RECREATE TABLE t_films(id INT PRIMARY KEY, title VARCHAR(100));
RECREATE TABLE t_sound(id INT PRIMARY KEY, audio BLOB);
RECREATE TABLE t_video(id INT PRIMARY KEY, video BLOB);
COMMIT;
-- создание необновляемого представления
RECREATE VIEW v_films AS
SELECT f.id, f.title, s.audio, v.video
FROM t_films f
LEFT JOIN t_sound s ON f.id = s.id
LEFT JOIN t_video v ON f.id = v.id;
/* Для того чтобы сделать представление обновляемым создадим
триггер, который будет производить манипуляции над базовыми
таблицами.
*/
SET TERM ^;
CREATE OR ALTER TRIGGER v_films_biud FOR v_films
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0 AS
BEGIN
IF (INSERTING) THEN
new.id = COALESCE(new.id, GEN_ID(g_films, 1));
IF (NOT DELETING) THEN
BEGIN
UPDATE OR INSERT INTO t_films(id, title)
VALUES(new.id, new.title)
MATCHING(id);
UPDATE OR INSERT INTO t_sound(id, audio)
VALUES(new.id, new.audio)
MATCHING(id);
UPDATE OR INSERT INTO t_video(id, video)
VALUES(new.id, new.video)
MATCHING(id);
END
ELSE
BEGIN
DELETE FROM t_films WHERE id = old.id;
DELETE FROM t_sound WHERE id = old.id;
DELETE FROM t_video WHERE id = old.id;
END
END^
SET TERM ;^
/*
* Теперь мы можем производить манипуляции над
* этим представлением как будто мы работаем с таблицей
*/
INSERT INTO v_films(title, audio, video)
VALUES('007 coordinates skyfall', 'pif-paf!', 'oh! waw!');
ALTER VIEW
Изменение существующего представления.
DSQL
ALTER VIEW viewname [<full_column_list>] AS <select_statement> [WITH CHECK OPTION]; <full_column_list> ::= (colname [, colname ...])
Параметр | Описание |
---|---|
viewname |
Имя существующего представления. |
select_statement |
Оператор |
full_column_list |
Список столбцов представления. |
colname |
Имя столбца представления.Дубликаты имён столбцов не позволяются. |
Оператор ALTER VIEW
изменяет определение существующего представления, существующие права на представления и зависимости при этом сохраняются.Синтаксис оператора ALTER VIEW
полностью аналогичен синтаксису оператора CREATE VIEW
.
Warning
|
Будьте осторожны при изменении количества столбцов представления.Существующий код приложения может стать неработоспособным.Кроме того, PSQL модули, использующие изменённое представление, могут стать некорректными.Информация о том, как это обнаружить, находится в приложении Поле RDB$VALID_BLR. |
Выполнить оператор ALTER VIEW
могут:
Владелец представления;
Пользователи с привилегией ALTER ANY VIEW
.
ALTER VIEW PRICE_WITH_MARKUP (
CODE_PRICE,
COST,
COST_WITH_MARKUP
) AS
SELECT
CODE_PRICE,
COST,
COST * 1.15
FROM PRICE;
CREATE OR ALTER VIEW
Создание нового или изменение существующего представления.
DSQL
CREATE OR ALTER VIEW viewname [<full_column_list>] AS <select_statement> [WITH CHECK OPTION]; <full_column_list> ::= (colname [, colname ...])
Параметр | Описание |
---|---|
viewname |
Имя представления.Может содержать до 63 символов. |
select_statement |
Оператор |
full_column_list |
Список столбцов представления. |
colname |
Имя столбца представления.Дубликаты имён столбцов не позволяются. |
Оператор CREATE OR ALTER VIEW
создаёт представление, если оно не существует.В противном случае он изменит представление с сохранением существующих зависимостей.
CREATE OR ALTER VIEW PRICE_WITH_MARKUP (
CODE_PRICE,
COST,
COST_WITH_MARKUP
) AS
SELECT
CODE_PRICE,
COST,
COST * 1.15
FROM PRICE;
DROP VIEW
Удаление существующего представления.
DSQL
DROP VIEW viewname
Параметр | Описание |
---|---|
viewname |
Имя представления. |
Оператор DROP VIEW
удаляет существующее представление.Если представление имеет зависимости, то удаление не будет произведено.
Выполнить оператор DROP VIEW
могут:
Владелец представления;
Пользователи с привилегией DROP ANY VIEW
.
DROP VIEW PRICE_WITH_MARKUP;
RECREATE VIEW
Создание нового или пересоздание существующего представления.
DSQL
RECREATE VIEW viewname [<full_column_list>] AS <select_statement> [WITH CHECK OPTION]; <full_column_list> ::= (colname [, colname ...])
Параметр | Описание |
---|---|
viewname |
Имя представления.Может содержать до 63 символов. |
select_statement |
Оператор |
full_column_list |
Список столбцов представления. |
colname |
Имя столбца представления.Дубликаты имён столбцов не позволяются. |
Создаёт или пересоздаёт представление.Если представление с таким именем уже существует, то оператор RECREATE VIEW
попытается удалить его и создать новое.Оператор RECREATE VIEW
не выполнится, если существующее представление имеет зависимости.
RECREATE VIEW PRICE_WITH_MARKUP (
CODE_PRICE,
COST,
COST_WITH_MARKUP
) AS
SELECT
CODE_PRICE,
COST,
COST * 1.15
FROM PRICE;