cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
11 juil. 2008 à 11:36
pradiergael
Messages postés13Date d'inscriptionjeudi 7 mai 2009StatutMembreDernière intervention11 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 .
hymnuade
Messages postés39Date d'inscriptionmardi 21 décembre 2004StatutMembreDernière intervention15 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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
hymnuade
Messages postés39Date d'inscriptionmardi 21 décembre 2004StatutMembreDernière intervention15 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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
laye80
Messages postés2Date d'inscriptionmercredi 13 juillet 2011StatutMembreDerniè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 ?
pradiergael
Messages postés13Date d'inscriptionjeudi 7 mai 2009StatutMembreDernière intervention11 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