Według MSDN widoki złożone z prostych wyborów automatycznie pozwalają na użycie instrukcji wstawiania/aktualizacji/usuwania w tabeli. Czy istnieje sposób, aby temu zapobiec - powiedzieć serwerowi SQL, że widok jest tylko do odczytu i nie można go użyć do modyfikowania tabeli?Tworzenie widoków tylko do odczytu w serwerze Sql
Odpowiedz
Najlepszym sposobem byłoby usunięcie uprawnień UPDATE/DELETE/INSERT
w widoku.
Poza tym można utworzyć wyzwalacz INSTEAD OF
w widoku, który po prostu nie robi nic, aby aktualizacje cicho zawodziły lub są quite a few constructs that make views non updatable. Możesz wybrać taki, który nie zmienia semantyki lub wydajności, a następnie go narusza.
Edytuj: Poniżej wydaje się pasować do rachunku.
CREATE VIEW Bar
AS
SELECT TOP 100 PERCENT x
FROM foo
WITH CHECK OPTION
Mógłbyś podać operatorowi UNION
aby uczynić SQL Server zawieść podczas INSERT/UPDATE/DELETE operację, tak:
create view SampleView
as
select ID, value from table
union all
select 0, '0' where 1=0
Ostatnią kwerenda nie zwraca żadnych wierszy w ogóle, ale musi mieć taką samą ilość pól z tymi samymi typami danych co pierwsze zapytanie, aby bezpiecznie używać UNION
. Zobacz ten link, aby uzyskać więcej informacji: Different ways to make a table read only in a SQL Server database
Możesz również dodać "UNION SELECT TOP 0 * FROM table" (przynajmniej w SQLServer 2014). – Christoph
- 1. Tworzenie oddziału TFS Tylko do odczytu
- 2. Kanał "tylko do odczytu" tylko do odczytu
- 3. Właściwości tylko do odczytu
- 4. Tworzenie repozytorium tylko do odczytu za pomocą SpringData
- 5. Tworzenie listy rozwijanej Tylko do odczytu (nie wyłączone)
- 6. tworzenie sparametryzowanych widoków w oracle11g
- 7. Jak otworzyć bazę danych SQL Compact tylko do odczytu
- 8. Tworzenie widoków aktualizowalnych w TSQL
- 9. Właściwość tylko do odczytu OData
- 10. Tylko do odczytu obserwowalna kolekcja
- 11. Lista ciągów tylko do odczytu
- 12. Otwórz plik tylko do odczytu
- 13. Tabela jest „tylko do odczytu”
- 14. SQLite/PHP tylko do odczytu?
- 15. Koherentny widok tylko do odczytu bazy danych
- 16. Komórki DataGridView tylko do odczytu
- 17. CoreOS: tylko do odczytu systemu
- 18. tylko do odczytu atrybutów przełącz
- 19. Edycja widoku tylko do odczytu
- 20. Edytor MVC3 Tylko do odczytu
- 21. Zastępowanie właściwość tylko do odczytu w podklasie
- 22. NHibernate Linq w trybie tylko do odczytu
- 23. Czy tylko do odczytu w Objective-C?
- 24. Oprawa do odczytu tylko getter w AS3
- 25. Jak DropdownList tylko do odczytu w C#
- 26. Jak słownika tylko do odczytu w Pythonie
- 27. właściwości tylko do odczytu w PHP?
- 28. Pole tylko do odczytu w formularzu Django
- 29. Czy SQLite nadaje się do użycia jako pamięć podręczna tylko do odczytu na serwerze WWW?
- 30. lista połączeń w serwerze zarządzania serwerami sql
Uprawnienia +1 powinny zapobiegać temu kodowi. Ale jeśli ludzie mogą pisać poprzez widok, to podejrzewam, że są też pozwolenia na stołach bazowych ... – gbn
Dzięki, działa jak czar. Te widoki będą w rzeczywistości odnosić się do innej bazy danych, do której użytkownik nie będzie miał dostępu. Chcę, aby były one tylko do odczytu, aby użytkownik nie mógł modyfikować bazy danych, do której nie ma dostępu za pośrednictwem widoków w bazie danych, do której ma dostęp. Chcę używać uprawnień do poszczególnych baz danych zamiast uprawnień dla poszczególnych obiektów, aby zachować prostotę i być pewnym, że nie przeoczę naruszenia definicji uprawnień. –
Wskażę niebezpieczeństwo z kodem dołączonym do końca. Wydaje się, że zależy od "Z OPCJĄ KONTROLI". Jeśli wrócisz i poznasz edycję View with SQL Server Management Studio, to nie będzie zawierać "WITH CHECK OPTION", a widok zostanie ponownie odczytany/zapisany. – BIBD