我有一个包含有效 SQL
表达式的字符串列表。
我只需要执行那些不修改数据库的。
最好的方法是什么?只是做类似的事情:
if(sqlQuery.contains("DELETE")){
//don't execute this
}
似乎是个糟糕的 hack
更新:
我会让这个更具体。
我已经有了一个允许的 SQL
查询列表。我想确保只有这些被执行。
与这些匹配的最佳方式是什么?
最佳答案
做到这一点的最简单和最好(最全面)的方法是创建一个只读用户,并且只用该用户连接到数据库。在 SQLServer 中,最简单的方法是创建用户并将他们添加到内置的 "db_datareader" 角色中。这将只允许 SELECT。
而且您需要担心的不仅仅是 DELETE、INSERT 或 UPDATE。您还必须小心调用任何存储过程,因此为了安全起见,您还需要删除执行权限、ALTER 权限、GRANT 权限等...
编辑: 只需执行此...
CREATE LOGIN [user] WITH PASSWORD='password', DEFAULT_DATABASE=[your_db], CHECK_POLICY=OFF
GO
CREATE USER [user] FOR LOGIN [user]
EXEC sp_addrolemember N'db_datareader', N'your_db'
GO
关于java - 判断一个sql查询是否修改了数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13195935/