2014-01-17 3 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 пользователя. Если вы хотите написать, используйте пользователя admin.

Смежные вопросы