powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Линтер. Назначение ролей
5 сообщений из 5, страница 1 из 1
Линтер. Назначение ролей
    #35977981
alukart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В базе должно быть несколько администраторов. При создании пользователя им необходимо присвоить роль пользователю. Но назначать роли может только владелец роли, т.е. только один из админов. Можно было бы завести одного пользователя для всех админов, но это не секьюрно.
Как можно сделать чтобы все админы могли назначать роли?
...
Рейтинг: 0 / 0
Линтер. Назначение ролей
    #35981612
xuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, alukart!

В принципе владельцем роли является ее создатель и назначать роль может только он.

Если это Линтер версии 6.0 и выше, то админ-создатель ролей может создать
хранимые процедуры для назначения и отмены ролей и дать другим админам
права на выполнение этих процедур из-под своего логина. Примерно так:

username SYSTEM/MANAGER

create or replace procedure GRANT_ROLE (in USER_NAME char(66); in ROLE_NAME char(66))
code execute direct "grant role \"" + ROLE_NAME + "\" to \"" + USER_NAME + "\";"; end;

create or replace procedure REVOKE_ROLE (in user_name char(66); in ROLE_NAME char(66)) for debug
code execute direct "revoke role \"" + ROLE_NAME + "\" from \"" + USER_NAME + "\";"; end;

grant dba to ADMIN1;
grant dba to ADMIN2;
grant resource to USER1;
grant resource to USER2;
create or replace role ROLE1;

grant execute as owner on GRANT_ROLE to ADMIN1;
grant execute as owner on GRANT_ROLE to ADMIN2;
grant execute as owner on REVOKE_ROLE to ADMIN1;
grant execute as owner on REVOKE_ROLE to ADMIN2;

create or replace table TBL(I int);
insert into TBL values (1);
create or replace public synonym TBL for TBL;
grant select on TBL to ROLE1;

username ADMIN1/
! grant 1
execute SYSTEM.GRANT_ROLE('USER1','ROLE1') as owner;

username USER1/
! select 1 - yes
select * from TBL;
username USER2/
! select 2 - no
select * from TBL;

username ADMIN2/
! revoke 1
execute SYSTEM.REVOKE_ROLE('USER1','ROLE1') as owner;
execute SYSTEM.GRANT_ROLE('USER2','ROLE1') as owner;

username USER1/
! select 1 - no
select * from TBL;
username USER2/
! select 2 - yes
select * from TBL;

Возможно, этого будет достаточно в Вашем случае.
...
Рейтинг: 0 / 0
Линтер. Назначение ролей
    #35981617
xuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alukart, cразу не увидел Ваше сообщение - обычно вопросы по Линтеру появляются
в разделе "Другие СУБД". Еще можно писать на support@relex.ru
...
Рейтинг: 0 / 0
Линтер. Назначение ролей
    #35983987
alukart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ xuser, но к сожалению это Линтер 5.9.
...
Рейтинг: 0 / 0
Линтер. Назначение ролей
    #35985421
xuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 5.9, по-видимому, средствами СУБД этого не сделать. Идеология такая, что за каждый объект отвечает только один пользователь - только владелец распоряжается созданными им объектами.
Это, в частности, исключает конфликты между действиями разных админов.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Линтер. Назначение ролей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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