是否有SQL执行关键字列表,例如。 INSERT,ALTER

时间:2012-02-14 10:59:08

标签: sql sql-server database oracle

我有一个允许用户执行SQL脚本的程序。我有一个用户登录该程序,但即使是管理员用户,也有一个要求阻止执行。

我的意思是用户无法修改表等。通常我会建议所有用户连接都设置为只读,但程序中有一个元素需要能够执行INSERT。

我想检测用户可能执行的关键字,例如/ INSERT,UPDATE,ALTER,并希望某处有定义的列表。

2 个答案:

答案 0 :(得分:4)

从您的问题中不清楚为什么您不仅仅使用权限:根据需要为用户提供SELECT和/或INSERT权限。您还可以在存储过程中包装关键操作,并仅在程序上授予EXECUTE,如果这更符合您的需求。

解析实际的SQL很困难,因为你不仅可以搜索某些单词,还必须建立它们的上下文。以'DELETE'为例:

-- I guess you don't want this
delete from dbo.SomeTable
-- but maybe you do want this?
select * from dbo.SomeTable where Status = 'deleted'

恶意(或只是好奇)用户肯定会有兴趣测试解析代码的限制,看看他们可以用EXEC,sp_executesql,OPENQUERY等做些什么。

权限(可能与存储过程一起使用)是真正的解决方案,因为您建议的替代方案是编写和维护的痛苦,并且几乎肯定会有漏洞。

答案 1 :(得分:2)

我认为你最好使用你希望允许用户做的事情的白名单,而不是试图将你不希望他们做的所有事情列入黑名单。

他们只允许运行SELECT吗?