|  01.07.2010, 08:19 | #1 | 
| Сам.AX |  Суммарный 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 | 
| Участник | 
			
			Если СУБД MS SQL, то на мой взгляд, удобнее всего воспользоваться профайлером (SQL Server Profiler)
		 | 
|  | 
|  01.07.2010, 09:53 | #3 | 
| Сам.AX | 
			
			Профайлером в этом случае думаю удобно воспользоваться в случае с 2-3мя пользователем и 2-3мя таблицами. А если пользователей 1000? и неизвестно сколько у них пересекающихся в каждой таблице RLS -ов... Хотя может я чего-то о профайлере не знаю =) | 
|  | 
|  01.07.2010, 10:17 | #4 | 
| Участник | 
			
			Тогда поподробнее о задаче: - Нужно смотреть в рабочей или тестовой базе ? - Требуется отследить запросы для определенного числа форм/отчетов и т.п. или провести глобальный мониторинг ? - Прочие особенности | 
|  | 
|  01.07.2010, 10:40 | #5 | 
| Сам.AX | 
			
			1) на рабочей 2) глобальный мониторинг 3) база MS SQL... не знаю что еще дополнить =) | 
|  | 
|  01.07.2010, 10:57 | #6 | 
| Участник | 
			
			Тогда действительно профайлер не пойдет. PS. Может попробовать решить задачу как нибудь по другому ? Например для начала получить все возможные комбинации групп RLS для всех пользователей и анализировать уже их. | 
|  | 
|  01.07.2010, 11:22 | #7 | 
| Сам.AX | 
			
			Ну дак это небольшая проблема: получить пересекающиеся в таблице RLS запросы для каждого пользователя... Вопрос в том, что делать с ними дальше, ведь нужно получить SQL-запрос, пришедший на сервер БД из ядра Аксапты...
		 | 
|  | 
|  01.07.2010, 18:54 | #8 | 
| Участник | 
			
			Безумная идея: В Class/SysQueryRun/new для нужных таблиц добавить range типа X++: strfmt('((DataAreaId == DataAreaId) || (DataAreaId == "%1"))', curuserid())X++: strfmt('((DataAreaId == DataAreaId) || (TableField == "%1"))', curuserid())X++: strfmt('((DataAreaId == DataAreaId) || (RecId == %1))', xUserInfo::find().RecId)В профайлере добавить фильтр на текст %DATAAREAID=DATAAREAID% (сомневаюсь, что найдутся еще такие запросы  ). PS. По SysQueryRun например тут Не работает RLS по связанной таблице. Так и должно быть? PS2. Реализация и последствия на Вашей совести   | 
|  | |
| За это сообщение автора поблагодарили: AGRESSOR (1). | |
|  02.07.2010, 00:15 | #9 | 
| ---------------- | 
			
			глупый вопрос. а какова цель данного исследования? | 
|  | |
| За это сообщение автора поблагодарили: oip (1). | |
|  02.07.2010, 08:43 | #10 | 
| Сам.AX | 
			
			2 Wamr: Цель - предоставить начальству отчет вида Пользователь-Таблица-Суммарный запрос"    | 
|  | 
|  02.07.2010, 09:42 | #11 | 
| Участник | Цитата:  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 | 
| Axapta | Цитата: Цитата: 
		
			Если вы пытаетесь разобраться, как что-либо сделать (а не сообщаете об ошибке), начинайте с описания цели. И только потом описывайте конкретный шаг на пути к ней, который вы оне смогли выполнить. Зачастую люди, которым необходима техническая помощь, имеют на уме высокоуровневую цель и привязываются к одному из возможных, по их мнению, путей ее достижения. Они просят помочь выполнить один шаг, не отдавая себе отчета в том, что выбрали неверный путь. Чтобы разобраться в этом, может потребоваться много усилий. | 
|  | |
| За это сообщение автора поблагодарили: AGRESSOR (1). | |
|  02.07.2010, 10:39 | #13 | 
| Модератор | 
			
			Если у Вас есть ВНЯТНО спроектированная структура групп пользователей, если RLS группы отделены от групп с правами пользователей, достаточно простого как дверь отчета { Пользователь - Имя - Группа - Описание }. Если нет - наведите таки порядок или продолжайте рожать ежиков
		 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  02.07.2010, 10:50 | #14 | 
| Участник | |
|  | 
|  04.07.2010, 11:18 | #15 | 
| Модератор | 
			
			А можно с этого места поподробнее? Например, в каких версиях это нельзя сделать?
		 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  04.07.2010, 12:31 | #16 | 
| Участник | Цитата: Приведу пример почему мне больше нравится настройка 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 | 
| Axapta Retail User | 
			
			_scorp_, немного не поняла, в чем проблема сделать в 3-ке также как вы привели для 4-ки пример?  у нас в 3-й (SP3) сейчас настроено так - есть общая группа "кассир" - где выданы все права на работу с кассами (не RLS). и отдельно группы Касса1 Касса2 Касса3 и т.д. - где права на конкретную кассу (ограничены RLS) все работает отлично. | 
|  | 
|  05.07.2010, 08:48 | #18 | 
| Участник | 
			
			Поведение тройки, например: Проблема с RLS и SecurityKey. Про различия 3.0 - 4.0 - 2009 обсуждалось, например, начиная с этого поста: Безопасность на уровне записей 
				__________________ Ivanhoe as is.. | 
|  | 
|  05.07.2010, 09:00 | #19 | 
| Сам.AX | 
			
			2 Alexius: Большое спасибо. За основу взял ваш второй вариант, так как нужен именно SQL-запрос 2 oip, Vadik: Смею предположить, что именно оптимизацией групп и хочет заняться начальство  Оффтоп: Сам ненавижу работать без понимания цели, но начальство оно ж Там, а мы тут   | 
|  |