我正在开发一个应用程序,其中某些SQL Server查询将仅限于基于组标识的特定用户。
将这些存储在应用程序数据库中似乎是有意义的,我可以将它们与组名相关联,并且将来很容易添加/删除。
查询非常复杂,并且从日期字段,当前用户名等处获取了许多参数,例如JQuery。因此查询构造如下:
MyQuery = "SELECT * FROM Table1 WHERE Username = '" + System...CurrentUser +"' AND Somedate > '" + from.text +'";
现在我不确定如何获取此代码并在数据库中创建等效表示。我想过使用%USERNAME%,%FROMDATE%等特定标识符,然后使用字符串替换函数,但我不确定是否会遗留单引号。
像Replace("%USERNAME%", "'" + CurrentUser + "'")
之类的东西会起作用吗?
任何更好的想法!
有两件事:
答案 0 :(得分:4)
首先关闭:大警告:将SQL语句连接在一起会带来SQL injection attacks的巨大危险。您应该不惜一切代价避免使用此技术,而是使用参数化查询。
其次:你不能只是将那些“复杂查询”创建为存储过程(带参数) - 这就是存储过程真正擅长的 - 将复杂查询封装到外部的简单调用中。
然后,您可以使用标准SQL Server功能处理权限 - 为那些允许调用它的存储过程授予这些用户(和/或组)EXECUTE权限。