ASP.NET/SQL服务器:SQL Server数据库

问题描述:

我在处理应用程序,其中某些SQL Server的查询将被限制在基于一组特定身份的用户存储中复杂的查询。ASP.NET/SQL服务器:SQL Server数据库

这似乎是有道理的存储应用程序数据库,在那里我可以将其与组名称关联起来这些,很容易添加/未来删除。

的查询是相当复杂的,但并采取了一些参数如jQuery,并从日期字段,当前用户名等,所以查询构造,如:

MyQuery = "SELECT * FROM Table1 WHERE Username = '" + System...CurrentUser +"' AND Somedate > '" + from.text +'"; 

现在我不知道该如何拿这个代码并在数据库中创建一个等价的表示。我想过使用特定的标识符,例如%USERNAME%,%FROMDATE%等,然后使用字符串替换函数,但我不确定这会带出单引号。

会像Replace("%USERNAME%", "'" + CurrentUser + "'")工作?

任何更好的主意!

两件事情:

  1. 限制基于用户组的一些疑问。
  2. 相当容易添加/删除在未来/编辑查询(没有硬编码到C#?)
+0

愚蠢的问题:不能你刚才创建的使用标准SQL Server功能的存储过程(包括参数),以及手柄的权限? – 2011-05-10 16:34:56

+0

marc_s - 这应该是一个答案。我想自己发布这个答案,但是你打败了我。如果我已经将它作为评论发布,那么我会觉得自己像一个脚跟。此外,我会包含一个链接到OWASP关于SQL注入的文章。发布作为答案,我会投票。 – David 2011-05-10 16:41:31

+0

http://databases.about.com/od/sqlserver/a/storedprocedure.htm和https://www.owasp.org/index.php/SQL_injection – David 2011-05-10 16:44:17

第一关:BIG警告:串联SQL语句一起承担的SQL injection attacks有很大的危险。您应该不惜一切代价避免此技术,而应使用参数化查询

所有第二:不能你刚才创建的“复杂查询”存储过程(包括参数) - 这就是存储过程是在真正的好 - 封装复杂查询到从外面一个简单的调用。

然后,您可以处理使用标准的SQL Server功能的权限 - 为这些用户(和/或组)对谁被允许调用它的存储过程的执行权限。