AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.07.2010, 08:19   #1  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
? Суммарный RLS запрос в виде SQL
Уважаемые пользователи форума.
Ситуация:
Пользователь User1 состоит в группах Group1, Group2, Group3
Для каждой из этих групп настроен RLS на таблицу Table1.
Вопрос:
Как посмотреть суммарный запрос, который уходит на сервер при запросе пользователем User1 данных из таблицы Table1.
Причем нужно сделать это в коде, т.к. нужна информация по всем пользователям-таблицам...
Ax 4.0 sp02

Последний раз редактировалось AGRESSOR; 01.07.2010 в 09:48.
Старый 01.07.2010, 09:31   #2  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Если СУБД MS SQL, то на мой взгляд, удобнее всего воспользоваться профайлером (SQL Server Profiler)
Старый 01.07.2010, 09:53   #3  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
Профайлером в этом случае думаю удобно воспользоваться в случае с 2-3мя пользователем и 2-3мя таблицами.
А если пользователей 1000? и неизвестно сколько у них пересекающихся в каждой таблице RLS -ов...
Хотя может я чего-то о профайлере не знаю =)
Старый 01.07.2010, 10:17   #4  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Тогда поподробнее о задаче:
- Нужно смотреть в рабочей или тестовой базе ?
- Требуется отследить запросы для определенного числа форм/отчетов и т.п. или провести глобальный мониторинг ?
- Прочие особенности
Старый 01.07.2010, 10:40   #5  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
1) на рабочей
2) глобальный мониторинг
3) база MS SQL... не знаю что еще дополнить =)
Старый 01.07.2010, 10:57   #6  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Тогда действительно профайлер не пойдет.

PS. Может попробовать решить задачу как нибудь по другому ? Например для начала получить все возможные комбинации групп RLS для всех пользователей и анализировать уже их.
Старый 01.07.2010, 11:22   #7  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
Ну дак это небольшая проблема: получить пересекающиеся в таблице RLS запросы для каждого пользователя... Вопрос в том, что делать с ними дальше, ведь нужно получить SQL-запрос, пришедший на сервер БД из ядра Аксапты...
Старый 01.07.2010, 18:54   #8  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Безумная идея:

В Class/SysQueryRun/new для нужных таблиц добавить range типа
X++:
strfmt('((DataAreaId == DataAreaId) || (DataAreaId == "%1"))', curuserid())
это если длина кода пользователя <=3
X++:
strfmt('((DataAreaId == DataAreaId) || (TableField == "%1"))', curuserid())
TableField - любое строковое поле таблицы с длиной >=5
X++:
strfmt('((DataAreaId == DataAreaId) || (RecId == %1))', xUserInfo::find().RecId)
RecId пользователя будет потом несколько сложнее разобрать, но возможно.

В профайлере добавить фильтр на текст %DATAAREAID=DATAAREAID% (сомневаюсь, что найдутся еще такие запросы ).

PS. По SysQueryRun например тут Не работает RLS по связанной таблице. Так и должно быть?

PS2. Реализация и последствия на Вашей совести
За это сообщение автора поблагодарили: AGRESSOR (1).
Старый 02.07.2010, 00:15   #9  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
глупый вопрос.
а какова цель данного исследования?
За это сообщение автора поблагодарили: oip (1).
Старый 02.07.2010, 08:43   #10  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
2 Wamr: Цель - предоставить начальству отчет вида Пользователь-Таблица-Суммарный запрос"
Старый 02.07.2010, 09:42   #11  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от AGRESSOR Посмотреть сообщение
2 Wamr: Цель - предоставить начальству отчет вида Пользователь-Таблица-Суммарный запрос"
Постановка задачи уже лучше

1. Если босса удовлетворит разграничение в терминах АХ, то можно просто построить запросик по таблицам:
- UserInfo
- UserGroupList
- SysRecordLevelSecurity
- может еще что-то

2. Если нужно именно в виде предиката MS SQL, то
а. Развертываем копию рабочей базы
б. В Class/Info/startupPost добавляем формирование и запуск Query для нужной таблицы с range описанным выше. (не забываем исключить из "праздника" себя любимого )
в. Делаем job/class для запуска в цикле Аксапты под всеми (выбранными) пользователями.
(можно использовать за основу Тестирование прав пользователей. DAX 4.0.)
г. Настраиваем профайлер на базу и запускаем его.
д. Запускаем пункт в
е. Выбираем из профайлера получившиеся запросы и парсим их.

PS.Вариант 1 мне нравиться гораздо больше
За это сообщение автора поблагодарили: mazzy (2), shogel (1), AGRESSOR (1).
Старый 02.07.2010, 10:11   #12  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от AGRESSOR Посмотреть сообщение
2 Wamr: Цель - предоставить начальству отчет вида Пользователь-Таблица-Суммарный запрос"
Просто предоставить отчет - это не совсем цель. Сам по себе отчет без процедуры обработки данных из него бесполезен. Отчет - это возможный способ достижения цели. Цель - это, например, провести анализ запросов на предмет возможной оптимизации групп. Или проверить, как именно RLS работает в случае нескольких групп. Или еще что-то. Начальство-то что от этого отчета хочет? Может мы придумаем более правильный способ?

Цитата:
Если вы пытаетесь разобраться, как что-либо сделать (а не сообщаете об ошибке), начинайте с описания цели. И только потом описывайте конкретный шаг на пути к ней, который вы оне смогли выполнить.

Зачастую люди, которым необходима техническая помощь, имеют на уме высокоуровневую цель и привязываются к одному из возможных, по их мнению, путей ее достижения. Они просят помочь выполнить один шаг, не отдавая себе отчета в том, что выбрали неверный путь. Чтобы разобраться в этом, может потребоваться много усилий.
За это сообщение автора поблагодарили: AGRESSOR (1).
Старый 02.07.2010, 10:39   #13  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от AGRESSOR Посмотреть сообщение
2 Wamr: Цель - предоставить начальству отчет вида Пользователь-Таблица-Суммарный запрос"
Если у Вас есть ВНЯТНО спроектированная структура групп пользователей, если RLS группы отделены от групп с правами пользователей, достаточно простого как дверь отчета { Пользователь - Имя - Группа - Описание }. Если нет - наведите таки порядок или продолжайте рожать ежиков
__________________
-ТСЯ или -ТЬСЯ ?
Старый 02.07.2010, 10:50   #14  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
если RLS группы отделены от групп с правами пользователей
К сожалению не во всех версиях AX так можно делать.
Старый 04.07.2010, 11:18   #15  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
К сожалению не во всех версиях AX так можно делать
А можно с этого места поподробнее? Например, в каких версиях это нельзя сделать?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 04.07.2010, 12:31   #16  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
А можно с этого места поподробнее? Например, в каких версиях это нельзя сделать?
Вот. В AX 3.0 RLS-права работают по аддитивному принципу. В AX 4.0 изменили на рестриктивный. В AX 2009 вернули аддитивный. Мне больше нравится реализация в AX 4.0.
Приведу пример почему мне больше нравится настройка RLS-прав в AX 4.0. Пример задачи:
1. Менеджеры должны работать с определенными типами объектов.
2. Каждый менеджер может смотреть продажи по определенным регионам.

Реализация в AX 4.0:
1. Создаю группу пользователей "Менеджер". Для этой группы настраиваю права доступа. (Права на объекты, не RLS.)
2. Создаю столько столько групп пользователей сколько регионов. Для каждой группы устанавливаю RLS-права на свой регион.
3. Настройка прав менеджера сводится к включению его в группу "Менеджер" и если, например, он может видеть продажи трех регионов, то включение его еще в три группы соответствующих регионов.

Реализация в AX 2009
1. Для каждого менеджера создаем отдельную группу.
2. На эту группу настраиваем права.
3. На эту группу настраиваем RLS-права.
4. Включаем менеджера в настроенную группу.

Вся соль заключается в поддержке решения.
1. Разрешить менеджерам работать с отчетом "А". В AX 4.0 нужно для группы
"Менеджер" дать права на отчет "А". В AX 2009 нужно для группы каждого менеджера добавлять права на отчет "А".
2. Дать конкретному менеджеру права на просмотр продаж по дополнительному региону. В AX 4.0 нужно просто "киинуть" этому пользователю RLS-группу соответствующего региона. В AX 3.0 и 2009 нужно для группы этого менеджера править настройку запроса RLS.

Было бы хорошо, если бы когда нибудь дали выбирать администратору какой способ использовать.
За это сообщение автора поблагодарили: sukhanchik (6).
Старый 05.07.2010, 06:54   #17  
ViV is offline
ViV
Axapta Retail User
Самостоятельные клиенты AX
Axapta Retail User
 
200 / 79 (3) ++++
Регистрация: 14.09.2005
_scorp_, немного не поняла, в чем проблема сделать в 3-ке также как вы привели для 4-ки пример?
у нас в 3-й (SP3) сейчас настроено так - есть общая группа "кассир" - где выданы все права на работу с кассами (не RLS).
и отдельно группы Касса1 Касса2 Касса3 и т.д. - где права на конкретную кассу (ограничены RLS)
все работает отлично.
Старый 05.07.2010, 08:48   #18  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Поведение тройки, например: Проблема с RLS и SecurityKey.
Про различия 3.0 - 4.0 - 2009 обсуждалось, например, начиная с этого поста: Безопасность на уровне записей
__________________
Ivanhoe as is..
Старый 05.07.2010, 09:00   #19  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
2 Alexius:
Большое спасибо. За основу взял ваш второй вариант, так как нужен именно SQL-запрос
2 oip, Vadik:
Смею предположить, что именно оптимизацией групп и хочет заняться начальство
Оффтоп:
Сам ненавижу работать без понимания цели, но начальство оно ж Там, а мы тут
Теги
rls, security, права доступа, права доступа на уровне записей (rls)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как преобразовать запрос в SQL-инструкцию Oloops DAX: Программирование 7 07.07.2008 20:38
Поймать SQL запрос при формировании отчета Qaz Qwerty DAX: Программирование 7 12.06.2008 01:46
RLS&Расширенный запрос donMigel DAX: Функционал 14 18.01.2008 13:32
SQL мониторинг + прямой запрос к SQL Alex_KD DAX: Программирование 17 29.05.2007 03:58
SQL Запрос Александр Костоусов DAX: Программирование 5 24.09.2004 12:15

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:23.