Nev*_*ing 3 security sql-server sql-injection
假设我有一个 Web 应用程序,它允许用户输入 SQL 查询(SQL Server 2008+)。我希望用户能够运行任何 SELECT 查询并读取数据库中的任何内容,但我不希望他们能够插入/更新/删除/截断/执行等(简而言之:仅选择)。请注意,整个数据库中没有数据甚至数据库元数据被视为机密。
目前的规则:
这够了吗?除了选择之外,还有什么办法可以做吗?
编辑:谢谢 Thomas Stringer 关于 SELECT ... INSERT 的说明。这正是我所追求的信息。我将从查询字符串中删除所有换行符,这应该有助于解决这个问题。有没有其他方法可以解决这个问题并能够修改数据?
注意:CTE 与这种情况无关。让我们假设查询必须以 SELECT 开头。
确保应用程序使用仅被授予读取权限的登录名连接到服务器(在数据库中为其授予 db_datareader 角色以允许读取所有表),并且您应该处于良好状态。防止更改数据的最简单方法是确保用户无权更改任何内容。
授予执行权限时要小心,因为您可能会无意中允许用户根据过程所做的更改数据。