In base a MSDN, le viste composte da selezioni semplici consentono di utilizzare automaticamente le istruzioni di inserimento/aggiornamento/eliminazione sulla tabella. C'è un modo per impedirlo: dire al server Sql che la vista è in sola lettura, e non puoi usarla per modificare la tabella?Creazione di viste in lettura in Sql Server
risposta
Il modo migliore sarebbe rimuovere le autorizzazioni UPDATE/DELETE/INSERT
nella vista.
Oltre a ciò è possibile creare un trigger INSTEAD OF
nella vista che semplicemente non fa in modo che gli aggiornamenti non vengano eseguiti correttamente o che ci siano quite a few constructs that make views non updatable. Quindi puoi sceglierne uno che non cambia semantica o efficienza e quindi violarlo.
Modifica: Il seguente sembra adattarsi al conto.
CREATE VIEW Bar
AS
SELECT TOP 100 PERCENT x
FROM foo
WITH CHECK OPTION
è possibile specificare un operatore UNION
al fine di rendere SQL Server non riuscire durante l'INSERT/UPDATE/DELETE operazione, in questo modo:
create view SampleView
as
select ID, value from table
union all
select 0, '0' where 1=0
L'ultima query non restituisce alcuna riga a tutti, ma deve avere la stessa quantità di campi con gli stessi tipi di dati della prima query, al fine di utilizzare il UNION
in modo sicuro. Vedere questo link per maggiori informazioni: Different ways to make a table read only in a SQL Server database
È inoltre possibile aggiungere una tabella "UNION SELECT TOP 0 * FROM" (almeno in SQLServer 2014). – Christoph
- 1. viste aggiornabili - SQL Server 2008
- 2. Utilizzo di viste in SQL
- 3. Eliminare tutte le viste da SQL Server
- 4. Sql Server 2008 Nidificazione delle viste
- 5. Lettura di dati da Microsoft SQL Server in R
- 6. Come creare una tabella di sola lettura in SQL Server?
- 7. Come si elencano tutte le viste indicizzate in SQL Server?
- 8. Lettura di dati da SQL Server utilizzando Spark SQL
- 9. Creazione di una colonna calcolata in SQL Server 2008
- 10. Creazione variabile di tabella in SQL server 2008 R2
- 11. imposta la connessione al server sql in sola lettura?
- 12. Creazione di un server CalDAV in Rails
- 13. SQL in SQL Server
- 14. Creazione di viste in stile ASP.NET MVC in un'applicazione console?
- 15. Creazione di viste in modo programmatico in IOS (come funziona)?
- 16. nome di tabelle e viste in stored procedure in SQL Server 2005
- 17. Sql Query per elencare tutte le viste in un database SQL Server 2005
- 18. La lettura di un file di testo con SQL Server
- 19. Hashset equivalente in SQL Server
- 20. Perché le viste di SQL Server devono essere aggiornate di tanto in tanto
- 21. Viste indicizzate in Esplora oggetti di SQL Server 2014 senza nodo di indice
- 22. Tabelle temporanee in sql server
- 23. Come generare lo script di creazione della tabella utilizzando la query SQL in SQL Server
- 24. Come posso controllare le dipendenze 'viste' del server sql
- 25. Arrotondare in SQL Server?
- 26. alfanumerica in SQL Server
- 27. RaiseError in SQL Server
- 28. R in SQL Server
- 29. Intersect in SQL Server
- 30. Vincoli rimandabili in SQL Server
Le autorizzazioni +1 dovrebbero impedire questo codice. Ma se la gente può scrivere tramite la vista, sospetto che ci siano anche permessi sui tavoli di base ... – gbn
Grazie, funziona come un incantesimo. Queste viste faranno effettivamente riferimento a un altro database, a cui l'utente non avrà accesso. Voglio renderli di sola lettura in modo che l'utente non sia in grado di modificare quel database a cui non ha accesso tramite le viste nel database a cui ha accesso. Voglio utilizzare le autorizzazioni per-database invece delle autorizzazioni per oggetto per mantenere le cose semplici e per essere più sicuro di non perdere una violazione delle definizioni dei permessi. –
Indicherò un pericolo con il codice aggiunto alla fine. Sembra incentrato sul 'WITH CHECK OPTION'. Se torni e modifichi tardi la vista con SQL Server Management Studio, non includerà il 'WITH CHECK OPTION' e la vista sarà nuovamente letta/riscritta. – BIBD