6

我使用 SQLite 数据库并在执行实际查询之前运行 EXPLAIN 语句,以验证是否有任何写入数据库的尝试。

现在,我们已经迁移到 SQL Server,我需要知道查询是尝试写入数据库还是只是一个简单的 SELECT 语句。我基本上尽量避免任何恶意陈述。

4

2 回答 2

8

您可以通过单击预估查询计划按钮查看 SSMS 中任何查询的预估查询计划。

请参阅MSDN


但是,如果用户不应该写入数据库,则不应该有这样做的权限。确保它属于具有受限权限的角色。

于 2011-02-02T09:55:31.110 回答
3

如果您决定走这条路,您可以执行以下操作:

set showplan_xml on
go
set noexec on
go
select * from sysobjects
go
set noexec off
go
set showplan_xml off
go

这将返回 3 个包含单列 XML 的结果集。第二个结果集是实际查询的查询计划(在本例中为select * from sysobjects

但正如我在评论中指出的那样,您最好阻止用户有权进行任何更改。

也可以制作“仅”选择但也非常恶意的语句。我可以轻松编写一个独占锁定数据库中每个表的选择,并且需要一个小时才能运行。

于 2011-02-02T10:03:55.127 回答