java - 判断一个sql查询是否修改了数据库

标签 java sql sql-server regex

我有一个包含有效 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/

相关文章:

mysql - 如何在 SQLite 中使用 CompareTo() 的功能?

SQL - 在时区

java - 找不到驱动程序

sql - 获取SQL Server 2005、2008服务器中某个时间段的中值

java - Groovy 使用递归目录搜索查找文件的最新版本

c# - 跨语言(java和c#)对象序列化的策略

java - 在 Java 中使用 CTRL + A 选择更多文本字段

java - 自定义 Internet Explorer 以显示帮助

sql - 无法执行 msdb.dbo.sp_send_dbmail

sql - PostgreSQL 自动递增的默认值