1

有没有一种解析 SQL 语句的好方法,以确保它只包含一个 SELECT 语句而没有其他内容?我正在使用 C#、System.Data.SqlConnection 和 MS SQL Server

4

5 回答 5

6

您应该以无权执行除SELECT.

这样,任何非SELECT语句都将无法执行。

这是最安全的解决方案,没有复制 SQL Server 的解析器。

于 2010-11-09T16:19:54.617 回答
1

我想你可以想出一个正则表达式,但它可能不是 100% 安全的。

最好的方法是:
1. 编写存储过程和视图,并限制用户只能使用它们的权限。(以及某些表上的 SELECT 语句)
2. 构建数据抽象层。您构建查询,而不是其他人。让其他人只访问您公开的一些方法。
3. 使用 LINQ to SQL,但隐藏 DataContext 对象,因此不能对数据库进行任何更改。

于 2010-11-09T16:21:26.487 回答
0

我认为解析 sql 将是解决方案: 从另一个问题

于 2010-11-09T16:34:25.457 回答
-1

由于 SELECT 语句需要位于语句的最开头,因此您只需检查字符串以查看前 6 个字符是否为 SELECT:

if (stringSql.Substring(0, 6).ToUpper() == "SELECT")
{
    //execute statement
}
于 2010-11-09T16:15:36.940 回答
-1

检查以确保该语句以 SELECT 关键字开头,然后确保该语句不包含不是文字字符串的一部分的分号(它将开始另一个 SQL 语句)。

于 2010-11-09T16:17:42.307 回答