Автоподстановка роли при логине

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Олег Белов
Сообщения: 3
Зарегистрирован: 09 сен 2005, 15:17

Автоподстановка роли при логине

Сообщение Олег Белов » 09 сен 2005, 15:38

Есть сервер в котором зарегистрированы n пользователей. Есть некая база данных с которой они должны работать. В базе данных задано несколько ролей, которым назначены права, и распределение пользователей по этим ролям (точнее какие пользователи с какими ролями могут заходить в базу). Логика работы такова, что 1 пользователь может заходить только с одной ролью. Понятное дело что в таком случае при логине в базу из приложения дополнительно указывать роль не имеет смысла, т.к. она однозначно определена - это с логической точки зрения. Но практически IB требует ее указания.

В этом собственно и вопрос: Как можно красиво решить эту проблему?
Т.е. чтобы при входе указывать только логин и пасс.

P.S. Конечно есть варианты ПРЯМОГО решения вопроса...
Например, создать табличку в базе в которой прописать эти соответствия и права на чтение этой таблички ВСЕМ пользователям.
Затем логиниться сначала без роли, читать из этой таблички информацию, а потом перелогиниваться уже с заданной ролью для работы. Можно наверное даже табличку не создавать - системная вроде есть какая-то...
Но не хочется так мудрить с логином... может специалисты порекомендуют что-то более правильное и логичное...

Заранее всех благодарю.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 09 сен 2005, 18:51

элементарно. соответствие ролей пользователям хранится в rdb$user_privileges. Поэтому "дефолтную" роль можно сделать как 2 логина.
1.сначала обычный логин, без роли
2. чтение информации из rdb$user_privileges, то есть считывание роли пользователя
3. дисконнект
4. повторный "невидимый" коннект уже с заполненным параметром нужной роли.

Олег Белов
Сообщения: 3
Зарегистрирован: 09 сен 2005, 15:17

Сообщение Олег Белов » 13 сен 2005, 11:48

kdv
Огромное спасибо.

Все работает.
SELECT RDB$Relation_Name FROM RDB$User_Privileges WHERE RDB$User = :UserName;

Broom
Сообщения: 8
Зарегистрирован: 27 окт 2004, 10:02

Сообщение Broom » 14 сен 2005, 07:29

Олег Белов писал(а):kdv
Огромное спасибо.

Все работает.
SELECT RDB$Relation_Name FROM RDB$User_Privileges WHERE RDB$User = :UserName;
Возможный минус - если пользователю даны права на коннект с несколькими ролями - это работать не будет. Либо нужно дать ему возможность выбрать одну из разрешенных ему ролей.

Олег Белов
Сообщения: 3
Зарегистрирован: 09 сен 2005, 15:17

Сообщение Олег Белов » 14 сен 2005, 08:53

Broom
Безусловно все верно. Но в первом посте задано условие что с 1 пользователем сопоставлена только 1 роль.
Спасибо.

Ответить