Selon MSDN, les vues composées de sélection simples vous permettent automatiquement d'utiliser des instructions d'insertion / mise à jour / Supprimer sur la table. Existe-t-il un moyen d'éviter cela - de dire à SQL Server que la vue est réadonnée et que vous ne pouvez pas l'utiliser pour modifier la table? P>
3 Réponses :
Le meilleur moyen serait de supprimer les autorisations En dehors de cela, vous pouvez créer un EDIT: STRUT> Le ci-dessous semble adapter la facture. P> update / delete / insérer / insert code> sur la vue.
au lieu de la gâchette code> sur la vue qui ne fait que simplement que les mises à jour échouent silencieusement ou il y a
CREATE VIEW Bar
AS
SELECT TOP 100 PERCENT x
FROM foo
WITH CHECK OPTION
+1 Les autorisations doivent empêcher ce code. Mais si le folk peut écrire via la vue, je suppose que des autorisations sont aussi des autorisations sur les tables de base ...
Merci, fonctionne comme un charme. Ces points de vue feront réellement référence à une autre base de données, que l'utilisateur n'aura pas accès à. Je tiens à les faire rétablir afin que l'utilisateur ne puisse pas modifier cette base de données, il n'a pas accès à via les vues de la base de données qu'il a accès à. Je souhaite utiliser des autorisations par base de données au lieu d'autorisations par objet pour garder les choses simples et être plus sûrs de ne pas manquer une infraction dans les définitions de permission.
Je signalerai un danger avec le code ajouté à la fin. Il semble charger sur le "avec l'option de contrôle". Si vous revenez en retard et que vous modifiez la vue avec SQL Server Management Studio, il n'inclut pas l'option de contrôle »et la vue sera lue / écriture à nouveau.
Pour toute autre personne à la recherche de clarté, Sélectionnez Top 100% CODE> doit être combiné avec
avec l'option de contrôle code> à la fin de la vue afin de tentative d'écriture sur cette vue pour échouer. Dans mes tests avec 2014, l'une d'entre elles ne permet toujours pas de mettre à jour la vue.
Pour quelqu'un d'autre, la recherche de cela, il ne semble pas présenter un comportement cohérent pour moi. J'ai créé ma vue avec "Sélectionnez Top 100%" et "avec option de contrôle", mais si je tente de supprimer les données de la vue, les suppressions affectent la table sous-jacente. Ceci est sur SQL Server 2016.
Vous pouvez spécifier un opérateur code> Union code> afin de faire échouer SQL Server lors de la fonctionnement create view SampleView
as
select ID, value from table
union all
select 0, '0' where 1=0
Vous pouvez également ajouter un "Union Select top 0 * de table" (au moins dans SQLServer 2014).
Le meilleur moyen de gérer cela est d'autoriser uniquement l'accès aux vues. Ou refuser l'insertion / mettre à jour / supprimer l'accès aux utilisateurs donnés. Marche parfaitement. Créez également des vues »avec (Nolock)". P>