Начало » Использование СУБД » Firebird, HQbird, InterBase » mon$attachments (изменение поведения от 3 к 4 к 5)
mon$attachments [сообщение #5811] |
Thu, 12 December 2024 09:27 |
stelvic
Сообщений: 16 Зарегистрирован: November 2022
|
Junior Member |
|
|
Продолжу старую тему https://murcode.ru/forum/2-firebird-interbase/1341280-mon36a ttachments/ чисто ради академического интереса, поскольку практическую часть для себя решил. После той темы обнаружил, что в четверке вопрос решается не только с помощью процедуры с sql security definer, созданной SYSDBA, но и самым прямым способом, запрос:
select * from mon$attachments выдает все подключения, независимо от того кто его выполняет. А недавно попробовал пятерку и в ней поведение опять такое же как в тройке, т.е.админы видят все подключения, а простые юзеры - только свои.
Эти колебания вышли по недосмотру или по какой-то другой причине? И если недосмотр, то где в четверке или пятерке?
[Обновления: Thu, 12 December 2024 09:33] Известить модератора
|
|
|
|
|
|
|
Re: mon$attachments [сообщение #5817 является ответом на сообщение #5816] |
Thu, 12 December 2024 15:05 |
stelvic
Сообщений: 16 Зарегистрирован: November 2022
|
Junior Member |
|
|
hvlad писал(а) Thu, 12 December 2024 14:49
Значит он привилегированный.
Выполни для проверки SELECT RDB$SYSTEM_PRIVILEGE(MONITOR_ANY_ATTACHMENT) FROM RDB$DATABASE;
Да. Возвращает:
RDB$SYSTEM_PRIVILEGE
====================
<true>
Но по-идее не должен быть привилегированным.
По крайней мере в базе отресторенной из того же бекапа но пятеркой этот же пользователь с той же ролью возращает false.
[Обновления: Thu, 12 December 2024 15:09] Известить модератора
|
|
|
|
|
|
|
|
Re: mon$attachments [сообщение #5826 является ответом на сообщение #5825] |
Fri, 13 December 2024 13:24 |
stelvic
Сообщений: 16 Зарегистрирован: November 2022
|
Junior Member |
|
|
hvlad писал(а) Fri, 13 December 2024 11:52https://github.com/FirebirdSQL/firebird/issues/7610
Да, это очень похоже. Я правда думал, что это возможно связано с win_ssp, но в том тикете пользователи и роли обычные, так что, похоже, эта проблема была общая.
У меня еще один вопрос, если ты не против.
Пока экспериментировал с mon$attachments создал процедуру:create or alter procedure ATTACHMENTS
returns (
MY smallint,
MON$USER type of SEC$USER_NAME,
MON$TIMESTAMP type of MON$STATEMENT_TIMER)
sql security definer
as
begin
for select iif(mon$attachment_id=current_connection,1,0), mon$user,
mon$timestamp
from mon$attachments
where mon$remote_process is not null
order by mon$timestamp
into :my, :mon$user, :mon$timestamp
do suspend;
end пользователем с ролью rdb$admin, не SYSDBA. Дал права на нее обычным юзерам. Так вот когда селектят из нее, получают только коннекты этого пользователя, создавшего процедуру. Если такую-же процедуру создает SYSDBA, то все ок. Всем видно все коннекты.
Это нормально?
Экспериментировал на сервере Firebird-5.0.1.1469
Правда IBExpert, в котором это проделывал с fbclient.dll 3.0.11.33703
Дополню, что сам пользователь, создавший процедуру, видит все коннекты к базе и с select * from mon$attachments, и с select * from attachments
[Обновления: Fri, 13 December 2024 13:40] Известить модератора
|
|
|
Re: mon$attachments [сообщение #5828 является ответом на сообщение #5826] |
Sat, 14 December 2024 14:09 |
hvlad
Сообщений: 364 Зарегистрирован: August 2022
|
Senior Member |
|
|
stelvicПока экспериментировал с mon$attachments создал процедуру:create or alter procedure ATTACHMENTS
returns (
MY smallint,
MON$USER type of SEC$USER_NAME,
MON$TIMESTAMP type of MON$STATEMENT_TIMER)
sql security definer
as
begin
for select iif(mon$attachment_id=current_connection,1,0), mon$user,
mon$timestamp
from mon$attachments
where mon$remote_process is not null
order by mon$timestamp
into :my, :mon$user, :mon$timestamp
do suspend;
end пользователем с ролью rdb$admin, не SYSDBA. Дал права на нее обычным юзерам. Так вот когда селектят из нее, получают только коннекты этого пользователя, создавшего процедуру. Если такую-же процедуру создает SYSDBA, то все ок. Всем видно все коннекты.
Это нормально? Я не нашёл в стандарте должны ли учитываться роли DEFINER'а при проверке прав.
В коде я вижу использование только имени DEFINER'а, возможно будет учитываться его DEFAULT роль, если она есть.
Не проверял. И я с этим кодо мало знаком.
stelvicЭкспериментировал на сервере Firebird-5.0.1.1469
Правда IBExpert, в котором это проделывал с fbclient.dll 3.0.11.33703 Версия клиента тут не играет никакой роли.
stelvicДополню, что сам пользователь, создавший процедуру, видит все коннекты к базе и с select * from mon$attachments, и с select * from attachments Это в коннекте с явно указанной ролью RDB$AMIN ?
А если роль не указана ?
|
|
|
Re: mon$attachments [сообщение #5829 является ответом на сообщение #5828] |
Sat, 14 December 2024 16:30 |
stelvic
Сообщений: 16 Зарегистрирован: November 2022
|
Junior Member |
|
|
hvlad писал(а) Sat, 14 December 2024 14:09Я не нашёл в стандарте должны ли учитываться роли DEFINER'а при проверке прав.
В коде я вижу использование только имени DEFINER'а, возможно будет учитываться его DEFAULT роль, если она есть.
Не проверял. И я с этим кодо мало знаком.
Ок. Думаю, что большинство людей такое поведение устроит. Меня так точно. Просто нужно помнить о нем.
hvlad писал(а) Sat, 14 December 2024 14:09stelvicДополню, что сам пользователь, создавший процедуру, видит все коннекты к базе и с select * from mon$attachments, и с select * from attachments Это в коннекте с явно указанной ролью RDB$AMIN ?
А если роль не указана ?
Да в коннекте роль RDB$ADMIN. Это моя админская доменная учетка. А коннект трастед. Когда под ней коннекчусь всегда получаю роль RDB$ADMIN. Ради проверки могу ее убрать. Но это будет только в понедельник, когда на работу приду.
|
|
|
Re: mon$attachments [сообщение #5830 является ответом на сообщение #5829] |
Mon, 16 December 2024 08:09 |
stelvic
Сообщений: 16 Зарегистрирован: November 2022
|
Junior Member |
|
|
hvlad писал(а) Sat, 14 December 2024 14:09stelvicДополню, что сам пользователь, создавший процедуру, видит все коннекты к базе и с select * from mon$attachments, и с select * from attachments Это в коннекте с явно указанной ролью RDB$AMIN ?
А если роль не указана ?
Итак если сначала создать процедуру с sql security definer под юзером с ролью RDB$ADMIN (не SYSDBA), а потом у него эту роль отобрать, то при селекте из нее он видит как и все непривилегированные только свои коннекты. Что логично.
|
|
|
Переход к форуму:
Текущее время: Wed Dec 18 13:52:32 GMT+3 2024
Общее время, затраченное на создание страницы: 0.01064 секунд
|