服务器模式下对H2数据库的只读访问

问题描述 投票:0回答:1

目前我正在服务器模式下访问 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 连接限制为只读?

java h2 in-memory-database
1个回答
0
投票

只需使用

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.