Я работаю с Firebird 2.5.8, ODS версии 11.2, подключаюсь через Firebird ADO.NET v6.6 (на С# с использованием Visual Studio). Я создал инструмент управления базой данных для настройки наших таблиц, а также для выполнения некоторых основных операций управления пользователями Firebird. В базе данных есть разные роли (MyRoleX и MyRoleY), определенные для предоставления/ограничения доступа.
Операции по управлению пользователями включают предоставление/отзыв этих ролей различным пользователям. При входе в инструмент соединение использует РОЛЬ АДМИНИСТРАТОРА RDB$, а подключенный пользователь был создан с РОЛЬЮ АДМИНИСТРАТОРА. Наконец, может быть более одного пользователя Firebird (например, Mgr1 и Mgr2).
Итак, Mgr1 СОЗДАЕТ нового пользователя вместе с:
GRANT MyRoleX TO UserA;
GRANT MyRoleY TO UserA;
Затем Mgr1 не работает/отпуск/недоступен, а Mgr2 понимает, что UserA не должен был предоставлять MyRoleY. Но когда Mgr2 входит в систему и пытается выполнить команду:
REVOKE MyRoleY FROM UserA;
выдается сообщение об ошибке:
unsuccessful metadata update
Mgr2 is not grantor of Role on MyRoleY to UserA.
и если команда изменена на:
REVOKE MyRoleY FROM UserA GRANTED BY Mgr1;
то выдается сообщение об ошибке:
unsuccessful metadata update
Only SYSDBA or database owner can use GRANTED BY clause.
Хотя 2-е сообщение явно ясно, почему, если и Mgr1, и Mgr2 подключены с использованием ROLE=RDB$ADMIN (и, конечно, этим пользователям предоставлена РОЛЬ ADMIN), они НЕ могут выполнить эту операцию?
Из Заявление об отзыве привилегий, под заголовком «Отзыв предоставленных привилегий» говорится:
текущий пользователь должен войти в систему с полными административными привилегиями
Если вы вошли в систему под RDB$ADMIN, разве это не полные права администратора?
В верхней части ссылки под заголовком 'Роль RDB$ADMIN', также указано:
Назначение роли RDB$ADMIN обычному пользователю в базе данных предоставляет этому пользователю привилегии SYSDBA.
Так почему же тогда у Mgr2 такие привилегии, как у SYSDBA?
Некоторые вопросы, требующие ответов:
Я делаю что-то не так здесь? Есть ли способ подключить или разрешить Mgr2 ОТМЕНЯТЬ ПРЕДОСТАВЛЕНИЯ ГРАНТОВ РОЛЯМ, созданным Mgr1?
Мы НЕ хотим делиться учетными данными SYSDBA или владельца базы данных для выполнения этих операций, так что есть ли другие решения?
select CURRENT_ROLE from rdb$database
непосредственно перед отзывом - ДЕЙСТВИТЕЛЬНО ли соединение получает ту роль, которую, по вашему мнению, оно получает? - person Arioch 'The   schedule 15.08.2019