目前我正在服务器模式下访问 H2 数据库,并从我的 java 应用程序使用 JDBC URL,例如 jdbc:h2:tcp://localhost:8082/nio:~/source/database/database/ 。默认情况下,访问的用户具有读/写访问权限,我想将其限制为只读访问权限。
我在 JDBC URL 中遇到了 ACCESS_MODE_DATA=r 选项,这将使 H2 DB 访问变为只读,但访问 H2 DB 的用户如果不传递选项 ACCESS_MODE_DATA=r 就可以绕过它。
是否有其他选项可以将与 H2 数据库的 TCP 连接限制为只读?
只需使用
conn.setReadonly(true)
使 JDBC 连接变为只读。
public class JDBCReadonly {
private static final String URL = "jdbc:h2:tcp://192.168.10.20:9092/path/to/db-file-name"; // replace with your H2 URL
private static final String USERNAME = "sa"; // replace with your username
private static final String PASSWORD = ""; // replace with your password
public static void main(String[] args) {
Connection conn = connectReadonly();
}
public static Connection connectReadonly() {
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
conn.setReadOnly(true);
System.out.println("Connected to the H2 database successfully.");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
}