我们正在为用户创建一个UI来
1)在数据库上运行Select语句(查询可以包括Join或子查询)
2)同屏查看结果
现在,我们正在检查输入字符串是否包含以下任何关键字INSERT/UPDATE/DELETE/TRUNCATE/CREATE/ALTER/DROP/GRANT/REVOKE语句,并在只有数据库SELECT权限的SQL user下执行查询。
在reading user下执行查询之前,有没有其他方法可以添加额外的保护层来验证查询?
谢谢
发布于 2018-05-03 13:31:01
SQL
发布于 2018-05-03 13:32:24
我假设不是所有的应用程序用户都是有效的数据库用户。
您需要创建2个数据库登录。用户应该只拥有db_datareader权限,该权限应该用于运行查询。在您的代码中,处理SqlException以查看最终用户是否尝试执行select语句以外的其他语句。
应该有另一个数据库登录,应用程序代码应该使用它来执行任何其他DML操作。
发布于 2018-05-03 13:34:50
与其让人们编写任何他们想要的命令,只检查命令中你认为可能有害的一些单词,为什么不创建一个‘查询生成器’,它只能有一个操作(select),来自t个表(其中t是可用表数),并具有所需的列。您可以添加一些包含可用操作(在您的情况下选择)、可用表和可用列的下拉列表。这样,您就可以使用给定的输入自己生成查询,而不需要让用户直接向您的服务器写入命令。
https://stackoverflow.com/questions/50147519
复制相似问题