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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.03.2014, 23:11   #1  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
select crossCompany и Views - работает только для админов?
Какие могут быть причины что данный джоб работает только для админов:

X++:
static void jobCCView(Args _args)
{
    InventTableExpanded inventTableExpanded; //это View
    container conCompanies = [curext()];
    
    while select firstonly10 crossCompany:conCompanies inventTableExpanded 
        info(inventTableExpanded.ItemId);
}
если убрать crossCompany то работает и для обычных юзеров, но вместе никак.

Майкрософт говорит должно работать, оно работает, но почему-то только для пользователей с правами администратора.
http://msdn.microsoft.com/en-us/library/cc621079.aspx
__________________
_databaseTransDelete ... bl@$ !
Старый 14.03.2014, 07:14   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
А обычные пользователи теперь запускают job ?
__________________
Axapta book for developer
Старый 14.03.2014, 09:14   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
select crossCompany работает только если у пользователя есть права на таблицу!
Без прав на таблицу возвращается пустой курсор, об этом надо помнить.

В руководстве разработчика можно найти такую фразу:
A cross-company query cannot return data for companies that the user does not have permission to access. A cross-company query can be limited to a subset of the companies that the user is authorized to access.

aEremenko: DAX 2009, работа с несколькими компаниями

Последний раз редактировалось raz; 14.03.2014 в 09:19.
За это сообщение автора поблагодарили: Logger (5).
Старый 14.03.2014, 14:09   #4  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от MikeR Посмотреть сообщение
А обычные пользователи теперь запускают job ?
Изначально проблема возникла в отчете, это я изолировал ее в job чтобы легче было продемонстрировать.

Но можно и 'обычным' пользователем запускать job:
X++:
SecurityUtil::sysAdminMode(false);
__________________
_databaseTransDelete ... bl@$ !
Старый 14.03.2014, 14:12   #5  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от raz Посмотреть сообщение
select crossCompany работает только если у пользователя есть права на таблицу!
Да, но выборка идет только в текущей компании - conCompanies = [curext()].

Если убрать crossCompany в select то возвращает данные (опять же из текущей компании), значит не в правах дело ?

В любом случае у всех пользователей есть права на все компании.
__________________
_databaseTransDelete ... bl@$ !
Старый 14.03.2014, 14:45   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,873 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Если используется виртуальная компания то в запросе может использоваться системные таблички VirtualDataAreaList и dataarea

Возможно выключены права к ним.
Попробуйте дать доступ на ключ контроля доступа Открытие доступа к домену.
Старый 14.03.2014, 15:21   #7  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от Logger Посмотреть сообщение
Если используется виртуальная компания то в запросе может использоваться системные таблички VirtualDataAreaList и dataarea

Возможно выключены права к ним.
Попробуйте дать доступ на ключ контроля доступа Открытие доступа к домену.
Да, виртуальная компания есть.
Но я не вижу в AX2012 privilege SysOpenDoman.

Technet говорит:
Цитата:
Allow non-administrators to create virtual company accounts The system administrator can grant permission to create virtual company accounts to users who are not administrators.
  1. Assign the user to a role that has the Maintain virtual company accounts privilege. By default, the Information technology manager role has this privilege. For more information, see Assign users to security roles.
  2. If you assign the user to a role other than Information technology manager, use the Override permissions form to make sure that the role has Full control permissions to the TableCollectionList table and the VirtualDataAreaList table. For more information, see Create or modify a security role.
Но это не совсем то ? Роль SystemUser уже имеет View доступ к VirtualDataAreaList, если дать полный то пользователи смогут создавать новые виртуальные компании, что в теории чревато.

p.s. добавил всю роль Information technology manager, ничего не изменилось...
__________________
_databaseTransDelete ... bl@$ !

Последний раз редактировалось DTD; 14.03.2014 в 15:29.
Старый 14.03.2014, 15:28   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,873 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от DTD Посмотреть сообщение
Да, виртуальная компания есть.
Но я не вижу в AX2012 privilege SysOpenDoman.
Сорри.
Невнимательно прочитал. Забыл что в 2012-й все не так Забираю свои слова обратно касательно ключа контроля доступа. по поводу доступа к системным табличкам и вьюхам - проверьте.
а лучше включите трассировку запросов и посмотрите что реально уходит к БД
Старый 14.03.2014, 15:40   #9  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
X++:
select Table;
Эта команда не смотрит на наличие у пользователя, под которым она выполняется, прав доступа к таблице.

X++:
select crossCompany:conCompanies Table;
Эта смотрит, т.е. у пользователя ОБЯЗАТЕЛЬНО наличие прав доступа к таблице.

Есть три варианта:
1. давать права
2. не использовать crossCompany
3. не использовать crossCompany, но, если нужно запрос по нескольким компаниям, использовать конструкцию на основе Table.company(...);
За это сообщение автора поблагодарили: ZVV (1), Logger (3), DTD (1), gl00mie (2).
Старый 14.03.2014, 18:21   #10  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от raz Посмотреть сообщение
X++:
select Table;
Эта команда не смотрит на наличие у пользователя, под которым она выполняется, прав доступа к таблице.
Вроде как зависит от настроек на таблице, может и смотреть. Но в этом случае действительно это была неправильная проверка, намудрил.

Я предположил что к InventTableExpanded будет доступ у всех пользователей, но оказалось что я даже не мог ее открыть в АОТ под неадмином. Подставил в job другую view, которую мог открыть из AOT - BankAccountView. Job заработала.

Т.е. можно было провести параллель, - если открывается в AOT значит будет работать в crossCompany.

Перепроверил все таблицы в изначальной проблемной view (там пара десятков вьюх и запросов используется внутри) где были проблемы (InventValueReportView), некоторые добавил через Override Access у роли, пока не добился того чтобы она открывалась в браузере таблиц.

Job все равно не работала.

Перетащил все релевантные view в privilege.

Заработали и job и отчет !
Ненавижу views.

Спасибо.
__________________
_databaseTransDelete ... bl@$ !
Старый 15.03.2014, 14:39   #11  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от DTD Посмотреть сообщение
Вроде как зависит от настроек на таблице, может и смотреть.
Каюсь, забыл про AosAuthorization, наличие которого для обычного (полноценного) клиента весьма сомнительно.
Старый 26.03.2014, 09:08   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,873 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от raz Посмотреть сообщение
select crossCompany работает только если у пользователя есть права на таблицу!
Без прав на таблицу возвращается пустой курсор, об этом надо помнить.

В руководстве разработчика можно найти такую фразу:
A cross-company query cannot return data for companies that the user does not have permission to access. A cross-company query can be limited to a subset of the companies that the user is authorized to access.

aEremenko: DAX 2009, работа с несколькими компаниями
Спасибо.
Он, кстати, на проверку этих прав тратит немало процессорного времени. Так что формы начинает ощутимо притормаживать при переходе со строки на строку безо всяких запросов к БД и при первоначальной отрисовке грида (глазами видно как он строку за строкой прорисовывает). Т.е. тупит ax32.exe - жрет процессорное время.

Вы не знаете возможно как-то отключить эту проверку ?
Например сделать некий аналог серверного
X++:
unchecked(Uncheck::TableSecurityPermission)
P.S. У меня ax 2009

Последний раз редактировалось Logger; 26.03.2014 в 09:33.
Теги
ax2012, ax2012r2, crosscompany

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Чтение только завершенных транзакций. raz DAX: Программирование 4 19.05.2017 10:20
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
Ответ: По поводу while select forUpdate AndyD DAX: Программирование 2 19.07.2012 18:32
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:09.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.