我可以使用 JDBC 将 Microsoft SQL 服务器设置为只读吗?

Can I use JDBC to set Micrososft SQL Server read only?

我正在制作一个在 Docker 映像中运行 Microsoft SQL 服务器的 Clojure 库。我正在使用图像 2019-CU14-ubuntu-20.04.

有一个 JDBC 宏 with-db-transaction 可以接受只读参数。这适用于 PostgreSQL 图像,但不适用于 Microsoft SQL 服务器。有什么方法可以将与 SQL 服务器的连接设置为只读吗?

JDBC 没有 read-only 事务的概念,但它确实支持 read-only 连接(但仅作为提示,因此不一定需要支持基础数据库或 driver)。一些 driver 忽略此提示,而其他人则使用它来启动 read-only 事务。

微软SQL服务器JDBCdriver不支持; SQLServerConnectionConnection.setReadOnly(boolean) 的实现什么都不做:

@Override
public void setReadOnly(boolean readOnly) throws SQLServerException {
    if (loggerExternal.isLoggable(Level.FINER))
        loggerExternal.entering(loggingClassName, "setReadOnly", readOnly);
    checkClosed();
    // do nothing per spec
    loggerExternal.exiting(loggingClassName, "setReadOnly");
}

换句话说,不可以为 SQL 服务器将连接设置为 read-only。