RDB$ADMIN и ServicesAPI

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
VerLeon
Сообщения: 44
Зарегистрирован: 24 ноя 2007, 08:43

RDB$ADMIN и ServicesAPI

Сообщение VerLeon » 30 июн 2011, 07:23

Здравствуйте, уважаемые.
Проблема возникла - не пойму где.
Создаю юзера, даю ему роль RDB$ADMIN.
Пытаюсь под ним через ServicesAPI (ну вообще-то через FIBPlus - TpFIBSecurityService) достать список пользователей - видит только себя. Ну и редактировать, добавлять, удалять юзеров не может.
В параметрах аттача указываю роль, но такое ощущение, что эта роль просто игнорируется.

При этом при коннекте в IBExpert под этим юзером с указанной ролью - видит всех, все хорошо (но возможно там не ServicesAPI используется?).
через FIBPlus и DDL - редактирование юзеров тоже проходит на ура, проблема только в ServicesAPI.

Возможно это кривость ФИБа, но смотрел SPB, который он формирует для аттача - на мой неискушенный взгляд все там правильно - юзер-пароль- 60 (код параметра роли) 9 (длина) 'RDB$ADMIN'
Вот и интересно - на какой стороне затык, пули вроде вылетают...

В принципе мне бы и DDL хватило, если бы не надо было проверять есть ли уже такой юзер или нет. Проверять через попытку создания и получения ошибки от сервера в случае если он уже есть - вариант, конечно, но как-то.. некомильфо.

Firebird 2.5.0.26074
FIBPlus 6.8

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: RDB$ADMIN и ServicesAPI

Сообщение hvlad » 30 июн 2011, 10:52

VerLeon писал(а):Создаю юзера, даю ему роль RDB$ADMIN.
В какой БД ?

VerLeon
Сообщения: 44
Зарегистрирован: 24 ноя 2007, 08:43

Re: RDB$ADMIN и ServicesAPI

Сообщение VerLeon » 30 июн 2011, 10:58

Выполняется оба запроса:

GRANT RDB$ADMIN TO username;
ALTER USER username GRANT ADMIN ROLE;

Выполняются они в коннекте к рабочей базе, с которой потом и пытаемся работать, ну и естественно на том же сервере, т.е. security2 тоже одна и та же.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: RDB$ADMIN и ServicesAPI

Сообщение hvlad » 30 июн 2011, 11:23

А security2.fdb в какой ODS ?

VerLeon
Сообщения: 44
Зарегистрирован: 24 ноя 2007, 08:43

Re: RDB$ADMIN и ServicesAPI

Сообщение VerLeon » 30 июн 2011, 12:02

security2 - из дистриба, экспериментирую на чистой. ODS ее не смотрел, так как вроде ж в дистрибе должна быть правильная? Но проверю... (upd: Проверил - 11.2)

Ну видимо в то и проблема, что написанное в RN я не понял.

Код: Выделить всё

Since nobody can connect to the security database, the GRANT and REVOKE statements cannot be used here.
Instead, the RDB$ADMIN role is granted and revoked with the new SQL user management commands:

CREATE USER newuser PASSWORD 'password' GRANT ADMIN ROLE
ALTER USER existinguser GRANT ADMIN ROLE
ALTER USER existinguser REVOKE ADMIN ROLE
Но где я должен сие выполнять, в каком коннекте? В коннекте к рабочей базе по твоим словам не канает, к security2 я подключиться не могу.
Видимо проканало бы через gsec, но не хочется его искать.
А через API можно же роль грантовать, она же тогда будет именно security2? Сейчас попробую, но все равно остается непонятным про ALTER USER - почему оно-то не прилетает в security2?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: RDB$ADMIN и ServicesAPI

Сообщение hvlad » 30 июн 2011, 13:30

Вот этого
ALTER USER username GRANT ADMIN ROLE
достаточно для назначения RDB$ADMIN в security2.fdb указанному пользователю username.
Есс-но, выполнять это должен SYSDBA. В подключении к любой БД.
Т.е. после успешного выполнения этого запроса всё должно получиться.

gsec работает через сервисы, так что рекомендую проверить его.

Ещё раз - что делаешь и что видишь ?

VerLeon
Сообщения: 44
Зарегистрирован: 24 ноя 2007, 08:43

Re: RDB$ADMIN и ServicesAPI

Сообщение VerLeon » 30 июн 2011, 14:02

Вот этого
ALTER USER username GRANT ADMIN ROLE
достаточно для назначения RDB$ADMIN в security2.fdb указанному пользователю username.
Значит все-таки я правильно понял. И судя по всему роль все же назначилась: проверил через gsec - он всех видит по этим моим пользователем.
Делаю вывод - гонят старые FIB'ы, которые еще не знали, что роль может иметь значение в этом случае. Так что сорри за беспокойство, пойду их курить...

Ответить