有没有一种很好的方法来解析SQL语句以确保它只包含一个SELECT语句而没有其他内容?我正在使用C#,System.Data.SqlConnection和MS SQL Server
答案 0 :(得分:6)
您应该以无法执行除SELECT
之外的任何操作的用户身份连接到数据库。
这样,任何非SELECT
语句都将无法执行。
这是最安全的解决方案,不会复制SQL Server的解析器。
答案 1 :(得分:1)
我想你可以提出一个正则表达式,但很可能它不会100%安全。
这样做的最佳方法是:
1.编写存储过程和视图,并限制用户仅使用它们的权限。 (以及某些表格上的SELECT语句)
2.构建数据抽象层。您构建查询,而不是其他人。让其他人只能访问您公开的一些方法
3.使用LINQ to SQL,但隐藏DataContext对象,因此不能对数据库进行任何更改。
答案 2 :(得分:0)
我认为解析sql将是解决方案: from another question
答案 3 :(得分:-1)
由于SELECT语句需要位于语句的最开头,因此您只需检查字符串以查看前6个字符是否为SELECT:
if (stringSql.Substring(0, 6).ToUpper() == "SELECT")
{
//execute statement
}
答案 4 :(得分:-1)
检查以确保语句以SELECT关键字开头,然后确保该语句不包含不是文字字符串部分的分号(可以开始另一个SQL语句)。