ASP.NET / SQL Server:在SQL Server数据库中存储复杂查询

时间:2011-05-10 16:30:17

标签: sql-server

我正在开发一个应用程序,其中某些SQL Server查询将仅限于基于组标识的特定用户。

将这些存储在应用程序数据库中似乎是有意义的,我可以将它们与组名相关联,并且将来很容易添加/删除。

查询非常复杂,并且从日期字段,当前用户名等处获取了许多参数,例如JQuery。因此查询构造如下:

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

现在我不确定如何获取此代码并在数据库中创建等效表示。我想过使用%USERNAME%,%FROMDATE%等特定标识符,然后使用字符串替换函数,但我不确定是否会遗留单引号。

Replace("%USERNAME%", "'" + CurrentUser + "'")之类的东西会起作用吗?

任何更好的想法!

有两件事:

  1. 根据用户组限制某些查询。
  2. 将来合理地轻松添加/删除/编辑查询(不是硬编码到C#中?)

1 个答案:

答案 0 :(得分:4)

首先关闭:大警告:将SQL语句连接在一起会带来SQL injection attacks的巨大危险。您应该不惜一切代价避免使用此技术,而是使用参数化查询

其次:你不能只是将那些“复杂查询”创建为存储过程(带参数) - 这就是存储过程真正擅长的 - 将复杂查询封装到外部的简单调用中。

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