多个H2数据库连接,不同的访问方式

Posted

技术标签:

【中文标题】多个H2数据库连接,不同的访问方式【英文标题】:Multiple H2 database connections, different access modes 【发布时间】:2014-01-17 13:13:42 【问题描述】:

我有两个客户端分别连接到同一个 H2 数据库。我希望这些连接之一是只读的,一个是读写的。为此,我使用以下连接字符串:

只读:jdbc:h2:tcp://localhost/~/test;ACCESS_MODE_DATA=r

读写:jdbc:h2:tcp://localhost/~/test;ACCESS_MODE_DATA=rw

我的问题是访问模式似乎是数据库的属性而不是连接。所以当两个客户端同时在使用时,第一个连接的客户端会覆盖后续连接的访问​​方式。如果读写客户端在已经有来自只读客户端的连接时连接,则不能对数据库进行任何更改。反之亦然,如果读写客户端是第一个,则两个客户端都可以进行更改。访问模式似乎只有在没有现有连接时才会改变。

有什么办法可以解决这个问题吗?具有允许他们更改数据库的凭据的用户应该能够在一个客户端中执行此操作,但不能在另一个客户端中执行此操作,因此我无法简单地通过向不同用户授予不同权限来控制这一点。

【问题讨论】:

我不明白,为什么不能使用只读用户? @ThomasMueller 因为我希望一个人能够在两个客户端上使用相同的用户凭据,但只有在连接只读客户端时才会受到限制。 你为什么要这么做? 【参考方案1】:

您可以使用不同的用户。一位用户“只读”:

create table test(id int);
create user readOnly password '';
grant select on test to readOnly;

如果您想使用只读模式,请使用 readOnly 用户。如果你想写,请使用管理员用户。

【讨论】:

是否可以为新创建的用户授予对所有表的选择访问权限,而不仅仅是 test ?

以上是关于多个H2数据库连接,不同的访问方式的主要内容,如果未能解决你的问题,请参考以下文章

H2 功能特点

[h2两个数据库同步更新]h2数据库配置多个连接

提供多个表时,简单连接在 H2 数据库中不起作用

H2 数据库服务器从连接池为 TCP 客户端提供服务

与内存数据库中的同一个 H2 建立多个连接[重复]

Hibernate 连接访问多个数据库(含访问不同数据库的相同表)(转)