sql - 是否有 SQL 执行关键字列表,例如。插入、修改

标签 sql sql-server database oracle

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

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

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

最佳答案

从您的问题中不清楚您为什么不为此使用权限:根据需要向用户授予 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 等做什么。

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

关于sql - 是否有 SQL 执行关键字列表,例如。插入、修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9275692/

相关文章:

android - GreenDao无法设置数据库

php - 在PHP中上传图像将文件路径保存到数据库

sql - 在 SQL 中使用 Pivot 检索多行

sql-server - 数据库 Access 控制: Application or Database level control?

sql - 表的主键是否有索引?

c# - sqlparameter 性能不佳

java - 无法在 SQL Server 上使用 Java 和 JDBC 执行存储过程

使用存储过程进行具有唯一约束的 SQL 插入

sql - MS Access 报告中的 CountIf 公式

php - 通过 SSH 进行的 SQL 查询不起作用