目前,我允许管理员用户通过使用此方法提供动态查询来查询数据库:
public DataSet executeRawQuery(final String q) {
JdbcDataSet dataSet = jdbcTpl.execute(q, new DataSetBuildingCallback(settingsProvider));
return dataSet;
}
但是,我想允许它们仅使用select
语句和阻止表删除,删除等语句。我该怎么做?
SQL语句可能非常复杂,所以我不想检查字符串中的关键字。是否有 Spring的内置功能可以帮助我解决这个问题?
答案 0 :(得分:1)
正如我评论的那样,不需要检查输入字符串,只需让数据库本身处理安全性并使用仅允许select
语句的数据库连接。
为此,首先创建一个数据库用户并仅授予select
:
CREATE USER username IDENTIFIED BY apassword;
GRANT CONNECT TO username;
GRANT SELECT on schema.table TO username;
然后在获取JDBC连接时使用上面创建的用户名/密码。如果应用程序的其他部分需要插入/删除/更新,那么他们可以使用另一个连接。