我有一个基于 Java 的大型应用程序,它使用连接池来访问底层数据库以进行各种 CURD 和报告操作。该应用程序还提供数据库查询接口来运行各种查询。由于与应用程序的其余部分使用相同的连接池来运行这些查询,我想知道如何限制用户仅运行 SELECT 查询。我担心用户可能会有意或无意地删除表或删除/修改记录,这将是可怕的。有没有无需使用单独的连接池或只读用户的简单解决方案?
通过 Spring JPA,您可以使用只读事务:
@Service
public class MyService {
@Autowired
private MyRepository myRepository;
@Transactional(readOnly = true)
public List<MyEntity> findAll() {
return myRepository.findAll();
}
}
或者您可以更改数据库用户权限,例如在 MySQL 中:
GRANT SELECT ON mydb.* TO 'read_only_user'@'localhost';