Пользователь firebird с предоставленными привилегиями не может получить доступ к таблицам

Я создал пользователя Firebird (PIPPO) через jaybird, следует gsec "display":

GSEC> di
     user name                    uid   gid admin     full name
------------------------------------------------------------------------------------------------
SYSDBA                              0     0           Sql Server Administrator
PIPPO                               0     0           GesAll 1.0 User
GSEC>

Я создаю роль (GESALLDB_USER) в БД Firebird и предоставляю некоторые привилегии:

SQL> show grant;

/* Grant permissions for this database */
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO ROLE GESALLDB_USER

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COPPIE TO ROLE GESALLDB_USER

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COVE TO ROLE GESALLDB_USER
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_CONFIGURAZIONE TO ROLE GESALLDB_USER
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_COVE TO ROLE GESALLDB_USER
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_SOGGETTI TO ROLE GESALLDB_USER
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DEPOSIZIONI TO ROLE GESALLDB_USER
GRANT GESALLDB_USER TO PIPPO
SQL>

предоставил эту роль новому пользователю через jaybird (последняя строка перед):

проблема в том, что всякий раз, когда я пытаюсь выполнить запрос, я получаю сообщение:

SQL> select * from anelli;
Statement failed, SQLSTATE = 28000
no permission for read/select access to TABLE ANELLI
SQL>

Если я предоставлю ТАБЛИЦУ только что созданному пользователю, все будет работать.

SQL> grant all on anelli to pippo;
SQL> show grant;

/* Grant permissions for this database */
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO ROLE GESALLDB_USER

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO USER PIPPO

SQL> connect "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb" user "p
ippo" password "topolino";
Commit current transaction (y/n)?y
Committing.
Server version:
WI-V2.5.2.26540 Firebird 2.5
WI-V2.5.2.26540 Firebird 2.5/XNet (E7441EA1CA2CF4)/P12
WI-V2.5.2.26540 Firebird 2.5/XNet (E7441EA1CA2CF4)/P12
Database:  "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb", User: pi
ppo
SQL> select * from anelli;

PROGRESSIVO FEDERAZIONE RNA TIPO ANNO INIZIO FINE ATTIVA LAST_USED

============ =========== ====== ====== ====== ============ ============ ====== =

       1 FOI         89LR   E      2012              1          100 N
      0
       2 FOI         89LR   E      2013              1          100 S
     41

Любая помощь по этому поводу?

Спасибо, Джанлука.


person Gianluca Pasqualato    schedule 23.10.2013    source источник


Ответы (1)


В Firebird права, назначенные роли, применяются только тогда, когда эта роль указана при подключении к базе данных. Другими словами, если у пользователя есть роль, этот пользователь не получает автоматически права этой роли. Пользователь должен явно указать используемую роль, в противном случае применяются только права, назначенные PUBLIC и самому пользователю.

Для ISQL CONNECT спецификация:

CONNECT database name [user username] [password password] [role role_name];

Итак, для вашего конкретного примера используйте:

SQL> connect "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb" user "p
ippo" password "topolino" role GESALLDB_USER;

Имена ролей, заключенные в (одинарные или двойные) кавычки, обрабатываются с учетом регистра. Таким образом, использование role 'gesalldb_user' не будет соответствовать роли GESALLDB_USER, а role gesalldb_user -. Это похоже на правила для других имен объектов в двойных кавычках (например, имен таблиц и столбцов) в Firebird.

Это также применимо при использовании драйвера или компонента доступа, но точная конфигурация и имя свойства могут отличаться (например, для Jaybird это свойство roleName или sqlRole).

person Mark Rotteveel    schedule 23.10.2013
comment
Выполнено, как предложено, тот же результат: 'SQL ›connect c: \ users \ teiluke \ documents \ ondulati \ DB \ prova \ gesalldb.fdb user pippo password topolino role gesalldb_user; Версия сервера: WI-V2.5.2.26540 Firebird 2.5 База данных: c: \ users \ teiluke \ documents \ ondulati \ db \ prova \ gesalldb.fdb, пользователь: pippo, роль: gesalldb_user SQL ›select * from anelli; Оператор завершился неудачно, SQLSTATE = 28000 нет разрешения на чтение / выбор доступа к TABLE ANELLI SQL ›show grant; / * Предоставляем разрешения для этой базы данных * /. . . ПРЕДОСТАВИТЬ GESALLDB_USER PIPPO ' - person Gianluca Pasqualato; 23.10.2013
comment
@GianlucaPasqualato Странно, я постараюсь воспроизвести это и посмотреть, пропустил ли я что-нибудь. - person Mark Rotteveel; 23.10.2013
comment
@GianlucaPasqualato Я только что протестировал его, и роль чувствительна к регистру, когда она окружена (одинарными или двойными) кавычками, поэтому использование role 'gesalldb_user' не работает, но использование role 'GESALLDB_USER' или role gesalldb_user будет работать. - person Mark Rotteveel; 26.10.2013
comment
еще раз спасибо, он работает, если я запускаю его напрямую из isql, если я делаю это через jaybird: Properties props = new Properties (); props.setProperty (пользователь, utenteDB); props.setProperty (пароль, passDB); - person Gianluca Pasqualato; 27.10.2013
comment
Еще раз спасибо, он работает, если я запускаю его прямо из isql. Если я сделаю это с помощью jaybird: Properties props = new Properties (); props.setProperty (пользователь, utenteDB); props.setProperty (пароль, passDB); props.setProperty (роль, roleDB); Я распечатал roleDB, и его значение - GESALLDB_USER Connection conn = DriverManager.getConnection (jdbc: firebirdsql: localhost / 3050: + DB_path, props); Я получил: Errore: org.firebirdsql.jdbc.FBSQLException: исключение GDS. 335544352. Нет разрешения на чтение / выбор доступа к ТАБЛИЦЕ ‹table› - person Gianluca Pasqualato; 27.10.2013
comment
Для Jaybird свойство - roleNamesqlRole в качестве псевдонима), см. список свойств подключения - person Mark Rotteveel; 27.10.2013