Подключение к базе данных Firebird только для чтения - PullRequest
2 голосов
/ 01 апреля 2019

Я хочу подключиться к базе данных Firebird только для чтения (потому что место, где .fdb только для чтения для моего приложения.

Я подключаюсь так:

conn = fdb.connect(dsn="/path/to.fdb", user='****', password='****', charset='iso8859_1')

Я получаю сообщение об ошибке:

Ошибка при подключении к базе данных: \ n- SQLCODE: -551 \ n- нет разрешения на чтение и запись в базу данных /path/to.fdb ',-551, 335544352

Я использую FDB v2.0. В онлайн-документации о подключении только для чтения я не нашел ничего.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

К сожалению, то, что вы хотите, не возможно.У Firebird нет концепции соединений только для чтения.Каждое соединение должно иметь возможность записывать информацию в базу данных для администрирования транзакций (это относится даже к транзакциям только для чтения).

Единственное исключение относится к базам данных, которые были помечены как база данных только для чтения с использованием gfix .В этом случае транзакции добавляются к идентификатору последней совершенной транзакции.Тем не менее, пометка базы данных только для чтения сделает ее доступной только для чтения для всех соединений.

Если вашему приложению нужен доступ только для чтения, а другим приложениям нужен доступ на запись в ту же базу данных, единственным решением является использованиеСервер Firebird * и используйте пользователей (и роли), чтобы назначить достаточные права для чтения, но не записи в базу данных.


*: Firebird Embedded может быть достаточно, но в качествеЗатем пользователю необходим доступ на чтение / запись к базе данных, было бы проще обойти эту форму контроля доступа для злоумышленников.

1 голос
/ 01 апреля 2019

Возможно, это хорошая идея - создать пользователя для БД с определенной ролью и использовать эту роль при последующих подключениях. Примерно так:

$ isql firstdb.fdb -user SYSDBA -password masterkey
Database:  firstdb.fdb, User: SYSDBA
SQL> CREATE ROLE firstdbadmin;
SQL> GRANT SELECT, UPDATE, INSERT, DELETE ON sales_catalog
CON> TO ROLE firstdbadmin;
SQL> GRANT firstdbadmin TO TestAdmin;
SQL> quit;

Вы пытались использовать аргумент 'роль' при создании соединения? Вы можете посмотреть здесь , здесь и здесь

...