我使用 SQLite 数据库并在执行实际查询之前运行 EXPLAIN 语句,以验证是否有任何写入数据库的尝试。
现在,我们已经迁移到 SQL Server,我需要知道查询是尝试写入数据库还是只是一个简单的 SELECT 语句。我基本上尽量避免任何恶意陈述。
我使用 SQLite 数据库并在执行实际查询之前运行 EXPLAIN 语句,以验证是否有任何写入数据库的尝试。
现在,我们已经迁移到 SQL Server,我需要知道查询是尝试写入数据库还是只是一个简单的 SELECT 语句。我基本上尽量避免任何恶意陈述。
如果您决定走这条路,您可以执行以下操作:
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
)
但正如我在评论中指出的那样,您最好阻止用户有权进行任何更改。
也可以制作“仅”选择但也非常恶意的语句。我可以轻松编写一个独占锁定数据库中每个表的选择,并且需要一个小时才能运行。