根据MSDN,由简单选择组成的视图自动允许您在表上使用插入/更新/删除语句。有没有办法阻止 - 告诉Sql Server该视图是只读的,并且你不能用它来修改表格?在Sql Server中创建只读视图
7
A
回答
12
最好的办法是删除视图上的UPDATE/DELETE/INSERT
权限。
除此之外,您可以在视图上创建一个INSTEAD OF
触发器,该视图不会导致更新以静默方式失败,或者存在quite a few constructs that make views non updatable。所以你可以选择一个不会改变语义或效率,然后违反它的程序。
编辑:以下似乎符合法案。
CREATE VIEW Bar
AS
SELECT TOP 100 PERCENT x
FROM foo
WITH CHECK OPTION
7
你可以为了使SQL Server指定UNION
运营商INSERT/UPDATE过程中发生故障/ DELETE操作,像这样:
create view SampleView
as
select ID, value from table
union all
select 0, '0' where 1=0
最后的查询不返回任何行但必须具有与第一个查询具有相同数据类型的相同数量的字段,才能安全使用UNION
。请参阅此链接以获取更多信息:Different ways to make a table read only in a SQL Server database
+0
您还可以添加“UNION SELECT TOP 0 * FROM表”(至少在SQLServer 2014中)。 – Christoph
相关问题
- 1. 在SQL Server CE 3.5中创建视图
- 2. 如何在SQL Server中创建视图?
- 3. 只读在SQL Server
- 4. 如何在SQL Server中创建只读表?
- 5. C#&SQL Server:如何创建视图?
- 6. SQL Server创建从多个视图
- 7. 创建的SQL Server索引视图2008
- 8. 通过SQL Server创建视图
- 9. SQL Server:试图在存储过程中创建视图
- 10. 创建用户只能在SQL Server 2012中查看一个视图
- 11. 通过POST请求在SQL Server中的tempdb中创建视图
- 12. 如何在视图中创建只读字段
- 13. 如何在grails中创建只读视图?
- 14. 在SQL Server 2008 R2企业版中创建分区视图
- 15. 如何在SQL Server Compact中创建视图?
- 16. 使用SSMS在SQL Server 2008中创建视图
- 17. sql server 2012在存储过程中创建临时视图
- 18. 在特定数据库中创建SQL Server视图
- 19. 如何使用C#在SQL Server数据库中创建视图?
- 20. 在Microsoft SQL Server Management Studio中创建视图时遇到问题
- 21. 在sql server中创建视图时出错
- 22. 无法在SQL Server中创建索引视图
- 23. 在SQL Server中创建视图时忽略依赖关系
- 24. 在模式中创建多个视图 - SQL Server
- 25. 在SQL Server 2008中使用多项表创建视图
- 26. 在sql server中创建存储过程和视图的问题
- 27. SQL Server 2008创建过程并创建视图
- 28. Sql Server - 获取现有视图的视图创建语句
- 29. 创建视图SQL
- 30. 创建视图SQL
+1权限应该防止这种无法使用的代码。但是,如果民间人士可以通过视图写作,那么我怀疑也有基准表的权限... – gbn
谢谢,作品像一个魅力。 这些视图实际上会引用另一个用户无法访问的数据库。我想让它们只读,这样用户将无法通过他有权访问的数据库中的视图来修改他无权访问的数据库。我想使用每个数据库的权限而不是每个对象的权限来保持简单,并且更确定我不会错过权限定义中的违规。 –
我会在末尾附上代码指出危险。它似乎取决于'WITH CHECK OPTION'。如果您回顾并使用SQL Server Management Studio编辑视图,它将不包含'WITH CHECK OPTION',视图将再次被读取/写入。 – BIBD