powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
25 сообщений из 31, страница 1 из 2
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426116
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток,

получить права надо для проверки возможности доступа, изменения итп до обращения к таблице или процедуре. Чёт никак не найду в доке. Направьте.

Спасибо.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426117
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Препарируешь нужный запрос, ловишь ошибку недостачи прав.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426125
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПрепарируешь нужный запрос, ловишь ошибку недостачи прав.
когда доходит до запроса предполагается что уже какое то действие на клиенте уже произведено (напр. заполнена маска и данные в запросе посланы). Хотелось бы просто не дать открыть такую маску.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426126
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

а где искал. Попробуй в описании системных таблиц.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426127
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMikhail Tchervonenko,

а где искал. Попробуй в описании системных таблиц.

я так понимаю, напрямую из таблиц безопасности, простым запросом, получить нельзя т.к. даже SYSADBA доступа к ним напрямую не имеет. Должна быть какая то команда.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426129
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот походу
RDB$USER_PRIVILEGES
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426133
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoкогда доходит до запроса предполагается что уже какое то действие на клиенте уже произведено

Ты эта... почувствуй разницу между выполнением запроса и его препарированием.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426134
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMikhail Tchervonenkoкогда доходит до запроса предполагается что уже какое то действие на клиенте уже произведено

Ты эта... почувствуй разницу между выполнением запроса и его препарированием.
я знаю эту разницу :), но хочется правильно
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426138
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

если ты про таблицы SEC$ то в них права не хранятся, там только отображение сведений о пользователях, да и вообще это виртуальные таблицы. А права за исключением CREATE DATABASE хранятся в самой БД в таблице RDB$USER_PRIVILEGES
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426146
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMikhail Tchervonenko,

если ты про таблицы SEC$ то в них права не хранятся, там только отображение сведений о пользователях, да и вообще это виртуальные таблицы. А права за исключением CREATE DATABASE хранятся в самой БД в таблице RDB$USER_PRIVILEGES
да, уже разобрался, вот уже наваял но ещё не проверил


Код: sql
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
create or alter procedure SYSTEM_GET_ACCESS_RIGHTS (
   RELATION_NAME TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$RELATION_NAME,
   OBJECT_TYPE TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$OBJECT_TYPE default 0,
   FIELD_NAME TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$FIELD_NAME default NULL,
   USER_NAME TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$USER default NULL
)
returns
(
  PRIVILEGE CHAR(6)
)
as
begin
/*
RELATION_NAME: Имя объекта (таблица, роль, процедура) на который предоставляется полномочие.

OBJECT_TYPE: Идентифицирует тип объекта, к которому предоставляется привилегия:
• 0 – таблица;
• 1 – представление;
• 2 – триггер;
• 5 – процедура;
• 7 – исключение;
• 8 – пользователь;
• 9 – домен;
• 11 – набор символов;
• 13 – роль;
• 14 – генератор
(последовательность);
• 15 – функция;
• 16 – BLOB фильтр;
• 17 – сортировка;
• 18 – пакет.

PRIVILEGE: Привилегия, предоставляемая в полномочии
• A – all (все привилегии);
• S – select (выборка данных);
• I – insert (добавление данных);
• U – update (изменение данных);
• D – delete (удаление строк);
• R – reference (внешний ключ);
• X – execute (выполнение);
• G – usage (использование);
• M – membership (членство).
*/

 if (USER_NAME is NULL or (Trim(USER_NAME) = '') ) then
     USER_NAME = CURRENT_USER;

 SELECT RDB$PRIVILEGE FROM RDB$USER_PRIVILEGES
 WHERE  RDB$USER = :USER_NAME
 AND RDB$RELATION_NAME = :RELATION_NAME
 AND RDB$FIELD_NAME is NULL or (RDB$FIELD_NAME = :FIELD_NAME)
 AND RDB$OBJECT_TYPE = :OBJECT_TYPE
 into :PRIVILEGE;

 suspend;
end^

...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426147
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoя так понимаю, напрямую из таблиц безопасности, простым запросом, получить нельзяПростым - нет, права могут быть даны опосредованно.
Mikhail Tchervonenkoт.к. даже SYSADBA доступа к ним напрямую не имеетЧитать - можно.
Но не нужно.

Препарируй запрос, как уже посоветовали. Да хоть на старте программы.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426150
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

зачем препарировать, если к таблице надо выяснить права доступа то что бы выяснить все нужные надо препарировать несколько запросов (select, update, insert ....) а из RDB$USER_PRIVILEGES можно получить всё одним запросом. или проблема в том что на чтение RDB$USER_PRIVILEGES привилегию имеет только SYSDBA и дать на неё привилегию чтения всем плохая или невозможная идея?
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426154
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoесли к таблице надо выяснить права доступа то что бы выяснить все нужные надо
препарировать несколько запросов (select, update, insert ....)
А ты хочешь собрать вместе права текущего пользователя, текущей роли, всех ролей,
грантованных этой роли, а до кучи ещё и PUBLIC-а всего одним запросом?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426155
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

проверил, читать может любой успешно вошедший. Соотв встаёт вопрс почему через препарирование а не как по идее правильно. Скорость?
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426156
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMikhail Tchervonenkoесли к таблице надо выяснить права доступа то что бы выяснить все нужные надо
препарировать несколько запросов (select, update, insert ....)
А ты хочешь собрать вместе права текущего пользователя, текущей роли, всех ролей,
грантованных этой роли, а до кучи ещё и PUBLIC-а всего одним запросом?..
только для определённого объекта (таблицы/процедуры/... ) дабы выяснить максимально возможные и соотв. построить интерфейс в форме (скрыть что недоступно).
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426159
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoтолько для определённого объекта
Права на определённый объект могут быть выданы всему вышеперечисленному и ещё другим
объектам. То, что они не выданы пользователю прямо, ещё не значит, что он не может объект
использовать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426167
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoдабы выяснить максимально возможные и соотв. построить интерфейс в форме (скрыть что недоступно).Не нужно полномочия прикладного уровня заменять SQL полномочиями.
Это не работает нигде, кроме hello world.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426169
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMikhail Tchervonenkoтолько для определённого объекта
Права на определённый объект могут быть выданы всему вышеперечисленному и ещё другим
объектам. То, что они не выданы пользователю прямо, ещё не значит, что он не может объект
использовать.
согласен, но у меня частный случай, я раздаю привилегии только через роли, потому такой код будет работать
Код: sql
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
create or alter procedure SYSTEM_GET_ACCESS_RIGHTS (
   RELATION_NAME TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$RELATION_NAME,
   OBJECT_TYPE TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$OBJECT_TYPE default 0,
   FIELD_NAME TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$FIELD_NAME default NULL,
   USER_NAME TYPE of COLUMN RDB$USER_PRIVILEGES.RDB$USER default NULL
)
returns
(
  PRIVILEGE CHAR(6)
)
as
begin
/*
RELATION_NAME: Имя объекта (таблица, роль, процедура) на который предоставляется полномочие.

OBJECT_TYPE: Идентифицирует тип объекта, к которому предоставляется привилегия:
• 0 – таблица;
• 1 – представление;
• 2 – триггер;
• 5 – процедура;
• 7 – исключение;
• 8 – пользователь;
• 9 – домен;
• 11 – набор символов;
• 13 – роль;
• 14 – генератор
(последовательность);
• 15 – функция;
• 16 – BLOB фильтр;
• 17 – сортировка;
• 18 – пакет.

PRIVILEGE: Привилегия, предоставляемая в полномочии
• A – all (все привилегии);
• S – select (выборка данных);
• I – insert (добавление данных);
• U – update (изменение данных);
• D – delete (удаление строк);
• R – reference (внешний ключ);
• X – execute (выполнение);
• G – usage (использование);
• M – membership (членство).
*/

 if (USER_NAME is NULL or (Trim(USER_NAME) = '') ) then
     USER_NAME = CURRENT_ROLE;
 for
 SELECT RDB$PRIVILEGE FROM RDB$USER_PRIVILEGES
 WHERE  RDB$USER = :USER_NAME
 AND RDB$RELATION_NAME = :RELATION_NAME
 AND RDB$FIELD_NAME is NULL or (RDB$FIELD_NAME = :FIELD_NAME)
 AND RDB$OBJECT_TYPE = :OBJECT_TYPE
 into :PRIVILEGE
 do
 begin
    suspend;
 end
end^


проверил, работает как в моём случае как мне нужно. Если параметр пользователь оставить пустым или передать в него не пользователя а роль. Можно конечно усложнить и пройтись по правам роли на основе переданного пользователя но мне в данном проекте это уже не нужно думаю. Ходя может завтра допишу на всякий случай.

Всем спокойной ночи и спасибо за участие.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426171
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladMikhail Tchervonenkoдабы выяснить максимально возможные и соотв. построить интерфейс в форме (скрыть что недоступно).Не нужно полномочия прикладного уровня заменять SQL полномочиями.
Это не работает нигде, кроме hello world.
пока не вижу никаких тому противопоказаний. Если база выстроена правильно то её безопасность вполне может отвечать логике доступа на уровне форм.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426447
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,


единственное неудобство что при входе пользователем надо указывать его роль. Есть какая то возможность назначать роль по умолчанию для пользователя? дабы при входе без указания роли бралась какая то назначенная по умолчанию?
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426451
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

в 4.0 есть роли по умолчанию. Их права суммируются. Короче они что-то вроде групп. В 3.0 только хаками. Я один такой придумал, достаточно в ON CONNECT триггере выполнить SET ROLE через EXECUTE STATEMENT
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426454
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMikhail Tchervonenko,

в 4.0 есть роли по умолчанию. Их права суммируются. Короче они что-то вроде групп. В 3.0 только хаками. Я один такой придумал, достаточно в ON CONNECT триггере выполнить SET ROLE через EXECUTE STATEMENT

спасибо за идею,

я предполагал для всех пользователей вход по какой то минимальной по правам роли и потом делать SET ROLE,
но через ON CONNECT выглядит ещё лучше.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426455
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoединственное неудобство что при входе пользователем надо указывать его роль.Чтим стандарт.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426456
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЯ один такой придумал, достаточно в ON CONNECT триггере выполнить SET ROLE через EXECUTE STATEMENTХацкер :)

SQL роли не являются группами прав !
Они являются ролью приложения , потому и определяются приложением.
...
Рейтинг: 0 / 0
Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
    #39426461
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

до Таблоида по части хитрых рецептов я ещё не дорос :)
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как правильно получить права пользователя/роли к конкретной таблице/процедуре?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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