2014-01-17 135 views
1

我有兩個客戶端分別連接到同一個H2數據庫。我希望其中一個連接是隻讀的,一個是可讀寫的。要做到這一點,我使用下面的連接字符串:多個H2數據庫連接,不同的訪問模式

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

  • 讀寫:jdbc:h2:tcp://localhost/~/test;ACCESS_MODE_DATA=rw

我的問題是,訪問模式似乎是數據庫的屬性而不是連接。因此,當兩個客戶端同時使用時,建立第一個連接的客戶端將覆蓋後續連接的訪問​​模式。如果讀寫客戶端在已有來自只讀客戶端的連接時進行連接,則不能對數據庫進行任何更改。反之亦然,如果讀寫客戶端是第一個客戶端,兩個客戶端都可以進行更改。訪問模式似乎只在沒有現有連接時纔會更改。

有什麼辦法可以解決這個問題嗎?具有允許他們更改數據庫的憑據的用戶應該能夠在一個客戶端中執行此操作,但不能在另一個客戶端中執行此操作,所以我無法簡單地通過向不同用戶授予不同的權限來控制此操作。

+0

我不明白,爲什麼你不能使用只讀用戶? –

+0

@ThomasMueller因爲我希望一個人能夠爲兩個客戶端使用相同的用戶憑證,但只有在與只讀客戶端連接時才受到限制。 – GenericJon

+0

你爲什麼想這樣做? –

回答

0

您可以使用不同的用戶。一個用戶'只讀':

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

如果您想使用只讀模式,請使用readOnly用戶。如果你想寫,使用管理員用戶。