【问题标题】:String Check on malicious SQL恶意 SQL 的字符串检查
【发布时间】:2013-07-26 04:48:32
【问题描述】:

我正在编写一个简单的实用程序,它允许我们的用户在数据库上运行简单的 select SQL 语句来检索他们需要的数据。只是一个文本框和一个按钮,当他们单击按钮时,它将在列表中显示查询结果。

我的问题是我只希望他们能够运行 SELECT 语句。我不希望执行任何编辑语句,即更新、插入、删除、删除等。

有没有一种简单的方法来解析一个 sql 字符串以确保它只输入了一个只读的 select 语句?

【问题讨论】:

  • 您应该查看this 了解一些预防措施
  • 假设SELECT 语句总是安全的很危险。例如,SELECT * FROM sys.tables 可能会给某人一些相当危险的信息,他们可能会在您系统的其他地方使用这些信息。
  • 说到 simple 选择,创建一个简单的查询构建器会更安全,让用户选择一个表和一个条件。

标签: sql sql-server tsql sql-injection


【解决方案1】:

更好的方法是使用 sql 权限。作为数据阅读器,您的用户将只能选择。 exec sp_addrolemember db_datareader, <user>

【讨论】:

    【解决方案2】:

    解决此问题的最佳方法是创建一个只有有限权限的用户。

    如果您想允许用户从所有表中读取数据,那么您可以采用 Steve D 已经建议的方法。

    如果您希望允许用户仅从某些表而不是全部读取数据,那么您需要创建一个仅具有“公共”角色的用户,然后对特定表进行 GRANT SELECT。

    确保用户仅在此处为给定数据库选择了“公共”

    然后对所有表执行这个查询

    grant select on <schema>.<table> to <user>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多