powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Роль по умолчанию в FB3
7 сообщений из 7, страница 1 из 1
Роль по умолчанию в FB3
    #38835233
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу поделиться одним интересным на мой взгляд открытием.

В Firebird 3 появился оператор SET ROLE который может поменять роль на лету, т.е. без переконнекта. К тому же пользователю можно назначить множество произвольных тэгов для пользователя. Я решил проверить одну идею, которая должна назначить некую роль по умолчанию при авторизации пользователя.

Итак сам скрипт

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
-- Создаём тестового пльзователя
CREATE USER TEST PASSWORD 'test';

-- Роль для него
CREATE ROLE TEST_ROLE;

-- Добавляем тэг в которм прописана роль по умолчанию
ALTER USER TEST TAGS(DEFAULT_ROLE = 'TEST_ROLE');

-- Назначаем роль пользователю
GRANT TEST_ROLE TO TEST;

SET TERM^;

-- Ну и собствено триггер на событие соединения с БД
CREATE OR ALTER TRIGGER TR_ON_CONNECT
ACTIVE ON CONNECT POSITION 0
AS
BEGIN
  FOR
      SELECT
          SEC$VALUE AS DEFAULT_ROLE
      FROM
          SEC$USER_ATTRIBUTES
      WHERE SEC$KEY = 'DEFAULT_ROLE'
        AND SEC$USER_NAME = CURRENT_USER AS CURSOR C
  DO
  BEGIN
    EXECUTE STATEMENT 'SET ROLE ' || C.DEFAULT_ROLE;
  END
END^

SET TERM;^



Проверяем

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost:test' user 'test' password 'test';
Database:  'localhost:test', User: test
SQL> select current_role from rdb$database;

ROLE
===============================
TEST_ROLE

SQL>

На удивление работает :-)

Хотя возможно в данном решении есть какие-нибудь подводные камни.
...
Рейтинг: 0 / 0
Роль по умолчанию в FB3
    #38835339
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггер подправил чтобы не затирал указанную роль

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE OR ALTER TRIGGER TR_ON_CONNECT
ACTIVE ON CONNECT POSITION 0
AS
BEGIN
  IF (CURRENT_ROLE = 'NONE') THEN
  BEGIN
    FOR
        SELECT
            SEC$VALUE AS DEFAULT_ROLE
        FROM
            SEC$USER_ATTRIBUTES
        WHERE SEC$KEY = 'DEFAULT_ROLE'
          AND SEC$USER_NAME = CURRENT_USER AS CURSOR C
    DO
    BEGIN
      EXECUTE STATEMENT 'SET ROLE ' || C.DEFAULT_ROLE;
    END
  END
END
...
Рейтинг: 0 / 0
Роль по умолчанию в FB3
    #38835399
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

гемор какой-то. В InterBase 7.5 (в 2005 году) взяли, и влупили дефолтную роль в свойства юзера. Почему тут нельзя было так же?

Код: sql
1.
2.
3.
4.
CREATE USER name SET
[PASSWORD password]
[[NO] DEFAULT ROLE name]
...



правда, у них это работает только для тех юзеров, которые в базе, а не в admin.ib. :-)

Но с другой стороны, у FB-то create user работает для security2.fdb...
...
Рейтинг: 0 / 0
Роль по умолчанию в FB3
    #38835433
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

это не официальный путь. Я просто попытался повторить поведение IB.
...
Рейтинг: 0 / 0
Роль по умолчанию в FB3
    #38835434
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvгемор какой-то.
Гемора было бы меньше, если бы SET ROLE не было DDL-ем и могло выполяться без ES.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Роль по умолчанию в FB3
    #38835436
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

не на много
...
Рейтинг: 0 / 0
Роль по умолчанию в FB3
    #38835450
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

кстати, в я кидал трекер такую хотелку CORE-4414

правда если реализуют группы, то это будет на фиг не нужно
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Роль по умолчанию в FB3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]