Vues en lecture seule

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 11 juil. 2008 à 11:36
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

7 réponses

hymnuade Messages postés 39 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 15 février 2010
8 nov. 2008 à 15:12
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 nov. 2008 à 16:04
"...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
0
hymnuade Messages postés 39 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 15 février 2010
10 nov. 2008 à 12:41
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 nov. 2008 à 15:28
"...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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 nov. 2008 à 17:07
Salut,

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

/*
coq
MVP Visual C#
CoqBlog
*/
0
laye80 Messages postés 2 Date d'inscription mercredi 13 juillet 2011 Statut Membre Dernière intervention 8 décembre 2011
8 déc. 2011 à 22:48
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 ?
0
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
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
0
Rejoignez-nous