Droits d’exécution
L’exécution du code de vue SQL se fait toujours avec les privilèges de l’utilisateur qui le définit (propriétaire).
L’exécution du code de vue SQL se fait toujours avec les privilèges de l’utilisateur qui le définit (propriétaire).
L’instruction CREATE VIEW
peut être exécutée :
Les utilisateurs ayant le privilège de CREATE VIEW
.
L’utilisateur qui crée une vue devient le propriétaire de cette vue.
Pour les utilisateurs qui n’ont pas les privilèges d’administration pour créer une vue, ils doivent également avoir les privilèges de lecture (SELECT
) sur les tables et vues sous-jacentes, et d’exécution (EXECUTE
) des procédures stockées sélectives utilisées.
Pour permettre l’insertion, la mise à jour et la suppression par le biais d’une vue, le créateur (propriétaire) de la vue doit disposer des privilèges INSERT
, UPDATE
et DELETE
sur les objets de métadonnées sous-jacents.
Il n’est possible d’accorder des privilèges sur une vue à d’autres utilisateurs que si le propriétaire de la vue dispose lui-même de ces privilèges sur les objets sous-jacents.Ce sera toujours le cas si le propriétaire de la vue est le propriétaire des objets de métadonnées sous-jacents.
CREATE VIEW ENTRY_LEVEL_JOBS AS
SELECT JOB_CODE, JOB_TITLE
FROM JOB
WHERE MAX_SALARY < 15000;
Créez une vue renvoyant les colonnes JOB_CODE et JOB_TITLE uniquement pour les emplois dont le MAX_SALARY est inférieur à 15 000 $.Lors de l’insertion d’une nouvelle entrée ou de la modification d’une entrée existante, la condition MAX_SALARY < 15000 sera vérifiée, si la condition n’est pas remplie, l’insertion/modification sera rejetée.
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;
-- tables de base
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;
-- création d'une vue non renouvelable
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;
/* Pour que la vue puisse être mise à jour, créez un déclencheur qui manipulera les données sous-jacentes */
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 ;^
/* Nous pouvons maintenant manipuler cette vue comme si nous travaillions avec une table */
INSERT INTO v_films(title, audio, video)
VALUES('007 coordinates skyfall', 'pif-paf!', 'oh! waw!');
ALTER VIEW
Modification d’une vue existante.
DSQL
ALTER VIEW viewname [<full_column_list>] AS <select_statement> [WITH CHECK OPTION]; <full_column_list> ::= (colname [, colname ...])
Paramètre | Description |
---|---|
viewname |
Le nom d’une vue existante. |
select_statement |
Instruction |
full_column_list |
Liste des colonnes de la vue. |
colname |
Le nom de la colonne de la vue.Les noms de colonnes en double ne sont pas autorisés. |
L’instruction ALTER VIEW
modifie la définition d’une vue existante ; les permissions et les dépendances de la vue existante sont conservées.La syntaxe de l’instruction ALTER VIEW
est totalement similaire à celle de l’instruction CREATE VIEW
.
Warning
|
Soyez prudent lorsque vous modifiez le nombre de colonnes d’affichage.Le code d’application existant peut devenir inapplicable.En outre, les modules PSQL qui utilisent la vue modifiée peuvent devenir invalides.Vous trouverez des informations sur la manière de détecter ce phénomène dans l’annexe Champ RDB$VALID_BLR. |
L’opérateur ALTER VIEW
peut être exécuté :
Le propriétaire de la vue ;
Les utilisateurs ayant le privilège de 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
Créez une nouvelle vue ou modifiez une vue existante.
DSQL
CREATE OR ALTER VIEW viewname [<full_column_list>] AS <select_statement> [WITH CHECK OPTION]; <full_column_list> ::= (colname [, colname ...])
Paramètre | Description |
---|---|
viewname |
Nom de la vue.Peut contenir jusqu’à 63 caractères. |
select_statement |
Instruction |
full_column_list |
Liste des colonnes de la vue. |
colname |
Le nom de la colonne de la vue.Les noms de colonnes en double ne sont pas autorisés. |
La commande CREATE OR ALTER VIEW
crée une vue si elle n’existe pas.Sinon, il modifiera la vue tout en conservant les dépendances existantes.
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
Suppression d’une vue existante.
DSQL
DROP VIEW viewname
Paramètre | Description |
---|---|
viewname |
Le nom de la vue. |
La commande DROP VIEW
supprime une vue existante.Si la vue a des dépendances, elle ne sera pas supprimée.
L’instruction DROP VIEW
peut être exécutée :
Le propriétaire de la vue ;
Les utilisateurs ayant le privilège `DROP ANY VIEW'.
DROP VIEW PRICE_WITH_MARKUP;
RECREATE VIEW
Créez une nouvelle vue ou recréez une vue existante.
DSQL
RECREATE VIEW viewname [<full_column_list>] AS <select_statement> [WITH CHECK OPTION]; <full_column_list> ::= (colname [, colname ...])
Paramètre | Description |
---|---|
viewname |
Nom de la vue.Peut contenir jusqu’à 63 caractères. |
select_statement |
Instruction |
full_column_list |
Liste des colonnes de la vue. |
colname |
Le nom de la colonne de la vue.Les noms de colonnes en double ne sont pas autorisés. |
Crée ou recrée une vue.Si une vue portant ce nom existe déjà, l’instruction RECREATE VIEW
essaiera de la supprimer et d’en créer une nouvelle.L’instruction RECREATE VIEW
ne sera pas exécutée si une vue existante a des dépendances.
RECREATE VIEW PRICE_WITH_MARKUP (
CODE_PRICE,
COST,
COST_WITH_MARKUP
) AS
SELECT
CODE_PRICE,
COST,
COST * 1.15
FROM PRICE;