我有两个客户端与同一个H2数据库建立了单独的连接。我希望其中一个连接是只读的,一个是读写的。为此,我使用以下连接字符串:
只读:jdbc:h2:tcp://localhost/~/test;ACCESS_MODE_DATA=r
读写:jdbc:h2:tcp://localhost/~/test;ACCESS_MODE_DATA=rw
我的问题是访问模式似乎是数据库的属性而不是连接。因此,当两个客户端同时使用时,进行第一次连接的客户端将覆盖后续连接的访问模式。如果读写客户端在已经与只读客户端建立连接时连接,则不能对数据库进行任何更改。反之亦然,如果读写客户端是第一个,则两个客户端都可以进行更改。当没有现有连接时,访问模式似乎只会改变。
有什么办法可以解决这个问题吗?拥有允许他们更改数据库的凭据的用户应该能够在一个客户端中执行此操作,但不能在另一个客户端中执行此操作,因此我无法通过向不同用户授予不同权限来控制此操作。
答案 0 :(得分:0)
您可以使用不同的用户。一个用户'readOnly':
create table test(id int);
create user readOnly password '';
grant select on test to readOnly;
如果您想使用只读模式,请使用readOnly用户。如果要编写,请使用admin用户。