我正在编写一个GUI应用程序,允许用户根据SELECT SQL查询用户在TextBox中输入生成Excel文件。它将连接到SQL服务器,运行select over database,填充DataTable对象并将该数据推送到Exel文件。 我开发应用程序的方式易受SQL注入攻击,用户可能能够传递任何DML查询,例如DELETE或UPDATE。
SQLCLient库中是否有一种方法可以阻止用户输入DML查询并执行它们?我可以以某种方式强制SQLCommand对象在传递DELETE命令时抛出异常吗?
答案 0 :(得分:3)
正确的方法是创建一个数据库用户,只对指定的表或视图进行选择授权,如BhavO和评论中的jean所述。
为什么这是限制T-SQL命令的正确方法?
这些原因(以及其他)为什么GRANT,DENY等首先存在于SQL Server中。它们是很好的(成熟的,经过良好测试的,易于使用的)工具,可以在堆栈中的正确位置实现。
答案 1 :(得分:0)
创建仅包含select grants的数据库用户,并使用此用户进行连接,然后在执行命令时处理数据库SqlException。