Vues en lecture seule

Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
- - Dernière réponse : pradiergael
Messages postés
13
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
11 décembre 2011
- 8 déc. 2011 à 23:22
Salut à tous,

Je suis en train de créer des vues sous SQL2005 pour mettre à dispositions des données pour des applications Accès à partir de bases SQLServer.

Mais apparement, en consultant l'aide MSDN, j'en comprend que si certaines conditions sont remplies, les données des tables sous-jacentes peuvent etre mise à jours à travers ces vues.

Hors, dans mon cas, la mise à jours est absolument interdite.

Quelle est l'astuce pour créer des vues dont les données exposées sont systématiquement en lecture seule, quelque soit les conditions qui puissent etre remplies ???

Je ne maitrise absolument pas les applis Access qui vont consommer les données. Par contre, ces données sont issues d'une appli 3 tiers dont la mise à jour doit se faire obligatoirement à travers le modèle métier.
La mise à jour directe dans les tables est absolument interdite sous peine de corompre les données et de planter le modèle métier .

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Afficher la suite 

7 réponses

Messages postés
39
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
15 février 2010
0
Merci
Salut,

Si je comprends bien tu veux créer des vues sur des tables dont le contenu ne doit jamais évoluer ??? Strange isn't it ?

Ou alors tu veux t'assurer que la structure des tables, champs, etc. ne change pas car cela impliquerait que tes vues ne fonctionneraient plus ou pourraient ne plus fonctionner.
Auquel cas, tu peux créer tes vues en utilisant WITH SCHEMABINDING qui implique qu'en cas de modification de schéma de la base, une alerte sera émise si une modification impactant la vue est faîte.
Commenter la réponse de hymnuade
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
"...créer des vues sur des tables dont le contenu ne doit jamais évoluer..."
Pas du tout, les données dans les tables évolues, mais pas par l'intermédiaire des vues.

"...t'assurer que la structure des tables, champs, etc. ne change pas..."
Pas du tout, non plus.

Le but était de mettre à disposition d'une application Access des données gérées par une application sur un modèle 3 tiers. Donc tout cela par l'intermédaire de vues sur les tables de l'appli 3 tiers.

Ne maitrisant pas du tout le fonctionnement des applis Access, et pour des raisons de sécurité et d'intégrité de la base de données, les applis Access ne devaient absolument pas avoir la possibilité de pouvoir modifier les données dans les tables à travers des vues.

Le système est en production depuis 3 mois maintenant, et apparement ça fonctionne correctement. Les requettes des vues étant complexes, elles interdisent normalmenet à elles seules la modification des données.

Ceci dit, je suis toujours prenneur sur un moyen de créer des vues en "lecture seule" sur SQLServer

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Commenter la réponse de cs_casy
Messages postés
39
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
15 février 2010
0
Merci
Une vue est une table virtuelle fondée sur un SELECT. Sans INSERT ou UPDATE dans une requête de vue, comment un utilisateur d'une vue pourrait-il modifier le contenu de la base ?
Par défaut, une vue est en lecture seule. Maintenant, tu peux t'assurer qu'aucun mouvement sur les données ne peut avoir lieu en y associant que des utilisateurs qui ne sont que lecteurs des données.
Commenter la réponse de hymnuade
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
"...Par défaut, une vue est en lecture seule..."

C'est effectivement l'idée que je me faisais moi-aussi des vues. Mais en épluchant la doc de SQLServer, je me suis apperçu que l'on pouvait apparemment modifier les données à travers les vues en faisant des requettes Update classique comme sur les tables.
Cela est quand même limité à la complexité de la requette générant la vue.

Dans mon cas les requettes de générations sont relativements complexes (Case, jointures, sous-requettes, calculs, ....) ce qui devrait à priori empécher la mise à jour

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Commenter la réponse de cs_casy
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
65
0
Merci
Salut,

Au pire un bon DENY INSERT, UPDATE, DELETE et le problème est réglé.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
2
Date d'inscription
mercredi 13 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2011
0
Merci
En faite jai un problème similaire, mais quant moi jai fait une vue sur
sql server 2005 et je voudrais qu'elle soit proteger en modification que doit je faire ?
Commenter la réponse de laye80
Messages postés
13
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
11 décembre 2011
0
Merci
La solution DENY INSERT, UPDATE, DELETE ON schema.vue TO user devrait fonctionner parfaitement,
Vous avez cependant la possibilité de créer un trigger INSTEAD OF sur vos vues.
Cette solution est moins propre, mais elle permet de résoudre simplement le pb sans avoir à gerer les droits.

exemple
CREATE TRIGGER TRG_INSTEAD_OF_MA_VUE
ON MA_VUE
INSTEAD OF
AS
BEGIN
    DECLARE @a as int  -- code qui ne fait rien
    select @a=1
END
Commenter la réponse de pradiergael