与其他视图相反,可以安全地执行此操作(只需查看Data Explorer)。以下是您可以做的四件事来实现它:
账户安全
Sql Server 将允许您限制用于连接到数据库的帐户的可用权限。仅授予读取权限,并且仅授予相应的表。然后有人可以注入恶意代码,直到他们脸色发青,但它会在编译步骤失败,因为他们没有足够的权限。这可能意味着使用与应用程序其他部分不同的连接字符串进行此访问。
请注意,这对 sql 代码有好处,但也有其他类型的注入。如果您在运行之前将页面上的查询(全部或部分)显示给用户,您还应该注意 javascript 注入攻击,例如跨站点脚本。
查询调控器
您还想防御拒绝服务攻击。Sql 数据库使这些即使是偶然的也很容易发生,只需构造一个低效的查询。为了对抗这种威胁,您应该查看 Sql Server 中的查询调控器功能。请注意,调整这个人是很棘手的。
隔离
最安全的做法是还使用托管在专用服务器上的专用、经过净化的报告数据库。这确保了任何查询都不会影响生产,无论是在性能方面还是在服务器或帐户遭到破坏方面。sql server 中有一些功能,例如 SSIS,您可以使用这些功能自动从生产中填充您的报告数据库。
使用产品
关于安全性的一件事是,您永远不想发现自己正在构建自己的安全系统。创建看似有效、通过测试但存在细微缺陷的东西很容易,这些缺陷会导致后来的违规行为。您希望依靠供应商的产品作为核心竞争力,并可以提供支持和一定程度的赔偿。通常我在身份验证系统方面谈论这一点,但这条规则也适用于 sql 注入防御。
在这种情况下,可能值得查看 Stack Overflow 的Data Explorer。这是一个允许不受信任的用户构建任意查询的工具。该项目是开源的,因此您可以亲眼看到他们为确保安全所做的工作,或者甚至只是分叉该项目供您自己使用。再次值得一提的是,该工具的安全性的很大一部分是它旨在用于专用的、经过清理的数据库,因此它不会免除您对其他项目的要求。
不过,当一切都说完了,我认为设置一些视图并通过报告服务提供访问权限的评论可能是您最好的选择。