繁体   English   中英

解析一个SQL语句,看看它是否与SELECT语句不同?

[英]Parse a SQL statement to see if it is anything other then a SELECT statement?

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

您应该以没有SELECT权限的用户身份连接到数据库。

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

这是最安全的解决方案,只需复制SQL Server的解析器即可。

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

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

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

if (stringSql.Substring(0, 6).ToUpper() == "SELECT")
{
    //execute statement
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM