Según MSDN, las vistas compuestas de selecciones simples le permiten usar automáticamente las instrucciones de inserción/actualización/eliminación en la tabla. ¿Hay alguna forma de evitar esto? ¿Decirle a Sql Server que la vista es de solo lectura y que no puede usarla para modificar la tabla?Creación de vistas de solo lectura en el servidor Sql
Respuesta
La mejor manera sería eliminar los permisos UPDATE/DELETE/INSERT
en la Vista.
Aparte de eso, puede crear un disparador INSTEAD OF
en la vista que simplemente no hace nada para que las actualizaciones fallen silenciosamente o hay quite a few constructs that make views non updatable. Para que pueda elegir uno que no cambie la semántica o la eficiencia y luego lo viole.
Editar: Lo que sigue parece ajustarse a la factura.
CREATE VIEW Bar
AS
SELECT TOP 100 PERCENT x
FROM foo
WITH CHECK OPTION
puede especificar un operador UNION
con el fin de hacer que SQL Server falla durante el INSERT/UPDATE/DELETE operación, así:
create view SampleView
as
select ID, value from table
union all
select 0, '0' where 1=0
La última consulta no devuelve ninguna fila en absoluto, pero debe tener la misma cantidad de campos con los mismos tipos de datos que la primera consulta, para poder usar el UNION
de forma segura. Consulte este enlace para obtener más información: Different ways to make a table read only in a SQL Server database
También puede agregar un "UNION SELECT TOP 0 * FROM table" (al menos en SQLServer 2014). – Christoph
- 1. establece la conexión del servidor sql a solo lectura?
- 2. ¿Cómo encajan las vistas de base de datos de solo lectura en el patrón del repositorio?
- 3. Creación de búfer de profundidad de solo lectura
- 4. Creación de un repositorio de solo lectura con SpringData
- 5. Vistas del servidor SQL, bendición o maldición?
- 6. Creación de vistas en PHP: mejor práctica
- 7. sql conexión abierta en modo de solo lectura
- 8. ¿Cómo hacer una tabla de solo lectura en SQL Server?
- 9. Registrar consultas erróneas solo en el servidor SQL
- 10. Obtener fecha de creación de índice del servidor SQL
- 11. ¿Cómo establecer un campo de solo lectura en las vistas de carriles 3.1.0?
- 12. SQL Server 2005 - Establecer una columna como de solo lectura
- 13. Cómo abrir la base de datos SQL Compact solo lectura
- 14. Primer código de EF columna de solo lectura
- 15. ¿Cómo detectar el estado de solo lectura de la base de datos de SQL Server usando T-SQL?
- 16. Usar vistas en SQL
- 17. ¿Es posible aplicar el comportamiento de solo lectura con SqlCommand?
- 18. ¿JPA admite el mapeo de vistas sql?
- 19. Solo lectura DB Connection Strings
- 20. Exportar solo vistas en Postgres
- 21. Primer código EF y vistas del servidor SQL
- 22. ¿Cómo puedo verificar las dependencias 'vistas' del servidor sql?
- 23. ¿navegador independiente de solo lectura?
- 24. SQLite/PHP de solo lectura?
- 25. Abrir archivo de solo lectura
- 26. Propiedad de solo lectura PropertyGrid en el nivel de objeto
- 27. Ejecutando Solr en modo de solo lectura
- 28. propiedad de solo lectura en campo SenchaTouch
- 29. Campos de solo lectura en django formset
- 30. Propiedades de solo lectura en EF 4.1
+1 permisos deben evitar esto, no el código. Pero si la gente puede escribir a través de la vista, entonces sospecho que también hay permisos en las tablas base ... – gbn
Gracias, funciona como un encanto. Esas vistas se referirán a otra base de datos a la que el usuario no tendrá acceso. Quiero que sean de solo lectura para que el usuario no pueda modificar esa base de datos a la que no tiene acceso a través de las vistas en la base de datos a la que tiene acceso. Quiero usar permisos por base de datos en lugar de permisos por objeto para mantener las cosas simples y estar más seguro de que no omito una infracción en las definiciones de permisos. –
Señalaré un peligro con el código adjunto al final. Parece depender de la 'OPCIÓN DE CHEQUE'. Si vuelve y edita tarde la Vista con SQL Server Management Studio, no incluirá la opción 'WITH CHECK OPTION' y la vista se leerá/escribirá nuevamente. – BIBD