清理用户创建的动态SQL查询。只允许SELECT(没有INSERT,UPDATE,DELETE,DROP,EXEC等等…)
我正在开发一个带有Microsoft SQL Server 2005数据库的ASP2.0网站。
我需要实现一个功能,允许用户创建一个选择查询(没有太复杂),以便网站显示一个页面,其中包含查询的结果集。
我的问题是如何清理查询以确保没有插入/更新/删除/删除或其他恶意注入。
另外,我需要将查询封装在“with”子句中,以便我可以在结果集中添加标识列。 (我需要在页面上正确显示结果)
用于格式化查询的我的CSharp代码看起来像这样(简化了一点):
string query = txtQuery.Text;
query = query.ToLower();
query = query.Trim();
int orderByIndex = query.LastIndexOf("order by");
string orderBy = "";
if (orderByIndex != -1)
{
orderBy = query.Substring(orderByIndex);
query = query.Replace(orderBy, "");
}
query = "with query as (" + query + ") select row_number() over(order by (select 0)) as rowID, * from query " + orderBy;
我想创建一个存储过程来执行查询。我在考虑这样的事情:
CREATE PROCEDURE usp_execute_query
@sql nvarchar(max)
with execute as 'RestrictedUser'
as
begin
exec sp_executesql @sql
end
与RestrictedUser看起来像这样:
CREATE USER RestrictedUser WITHOUT LOGIN
EXEC sp_addrolemember db_datareader, RestrictedUser
我的问题是:
有没有办法检查RestrictedUser在存储过程中的角色,以确保它们没有被篡改?如果他们有,那就更好了。
你认为这一切都是正确的方法吗?有什么建议吗?
没有找到相关结果
已邀请:
1 个回复
丧泉缝锋