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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2012, 12:39   #1  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Разрешить чтение SysClientSessions не из под Admin
Добрый день, Коллеги.

Подскажите, пожалуйста, возможно ли как-то делать выборки из таблицы SysClientSessions из класса, который запускается пользователем, не входящим в группу Admin?

Dynamics Ax 2009.
Старый 29.05.2012, 14:42   #2  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Точно можно сделать это через ODBCConnection и админскую учетку:

X++:
    ODBCConnection          connection;
    LoginProperty           loginProp;
    SysSQLSystemInfo        systemInfo =  SysSQLSystemInfo::construct();

    Statement               statement;
    Resultset               resultSet;

    str                     otherStr;
    str                     sqlState;
    ;

    loginProp = new LoginProperty();
    otherStr += "DRIVER={SQL Server}";
    otherStr += ";Trusted_Connection=No";
    otherStr += strfmt(";SERVER=%1",     systemInfo.getLoginServer());
    otherStr += strfmt(";DataBase=%1",   systemInfo.getloginDatabase());
    otherStr += strfmt(";UID=%1",        'Admin');
    otherStr += strfmt(";PWD=%1",        'AdminPass');
    loginProp.setOther(otherStr);

    connection = new ODBCConnection(loginProp);
    
    sqlState = strfmt('SELECT TOP 1 [RECID] FROM [%1].[dbo].[%2]',
                      systemInfo.getloginDatabase(),
                      tableStr(SysClientSessions));

    statement       = connection.createStatement();
    new SqlStatementExecutePermission(sqlState).assert();
    resultSet = statement.executeQuery(sqlState);
    CodeAccessPermission::revertAssert();

    while (resultSet.next())
    {
        info (int642str(resultSet.getInt64(1)));
    }
Можно даже создать для этих целей отдельного пользователя на СУБД с правами только на чтение из таблицы SysClientSessions.

Последний раз редактировалось Dark Light; 29.05.2012 в 14:49.
Старый 29.05.2012, 14:52   #3  
online
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
при построении и выполнении запроса в коде, никак не проверяются права доступа на таблицы
Старый 29.05.2012, 14:58   #4  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
А для чего собственно такие выкрутасы ... может озвучите полное требование и поищем, как сделать системными вещами
__________________
Axapta book for developer
Старый 29.05.2012, 15:06   #5  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от ice Посмотреть сообщение
при построении и выполнении запроса в коде, никак не проверяются права доступа на таблицы
К сожалению, не для таблиц, относящихся к AdminTables.
Старый 29.05.2012, 15:09   #6  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от MikeR Посмотреть сообщение
А для чего собственно такие выкрутасы ... может озвучите полное требование и поищем, как сделать системными вещами
Имеет место полностью переписанная 2009 Axapta в которой механизм блокировки документов реализован с участием этой таблицы. Перед блокировкой документов, идёт проверка - нет ли заблокированных в данный момент документов, которые заняты "вылетевшими" пользователями. Вот для проверки и обращаемся к данной табличке
Старый 29.05.2012, 15:10   #7  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от Dark Light Посмотреть сообщение
Точно можно сделать это через ODBCConnection и админскую учетку:

X++:
    ODBCConnection          connection;
    LoginProperty           loginProp;
    SysSQLSystemInfo        systemInfo =  SysSQLSystemInfo::construct();

    Statement               statement;
    Resultset               resultSet;

    str                     otherStr;
    str                     sqlState;
    ;

    loginProp = new LoginProperty();
    otherStr += "DRIVER={SQL Server}";
    otherStr += ";Trusted_Connection=No";
    otherStr += strfmt(";SERVER=%1",     systemInfo.getLoginServer());
    otherStr += strfmt(";DataBase=%1",   systemInfo.getloginDatabase());
    otherStr += strfmt(";UID=%1",        'Admin');
    otherStr += strfmt(";PWD=%1",        'AdminPass');
    loginProp.setOther(otherStr);

    connection = new ODBCConnection(loginProp);
    
    sqlState = strfmt('SELECT TOP 1 [RECID] FROM [%1].[dbo].[%2]',
                      systemInfo.getloginDatabase(),
                      tableStr(SysClientSessions));

    statement       = connection.createStatement();
    new SqlStatementExecutePermission(sqlState).assert();
    resultSet = statement.executeQuery(sqlState);
    CodeAccessPermission::revertAssert();

    while (resultSet.next())
    {
        info (int642str(resultSet.getInt64(1)));
    }
Можно даже создать для этих целей отдельного пользователя на СУБД с правами только на чтение из таблицы SysClientSessions.
Способ интересный, спасибо. Но может быть есть более изящные решения?
Старый 29.05.2012, 16:40   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
запустить проверку из-под runas()
Старый 29.05.2012, 18:01   #9  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от mikki_messer Посмотреть сообщение
Имеет место полностью переписанная 2009 Axapta в которой механизм блокировки документов реализован с участием этой таблицы. Перед блокировкой документов, идёт проверка - нет ли заблокированных в данный момент документов, которые заняты "вылетевшими" пользователями. Вот для проверки и обращаемся к данной табличке
Не пробовали смотреть, как работает журнал главной книги?
Там есть и блокировка и снятие блокировки и просмотр, кем блокировано.
Может быть не совсем просто в реализации, но более оправдано чем обходные трюки с инициализацией соединения с базой данных в обход приложения.
Просто так понравится может, что уже всю логику будете в хранимках держать.

ЗЫ В коде на уровне базы данных нет возможности ставить ключи доступа и RLS, а так же теряется информация о том, кто и зачем менял.
Уж если не найдете другого варианта, то обязательно оберните код в try catch и ловите исключения
__________________
Axapta book for developer

Последний раз редактировалось MikeR; 29.05.2012 в 18:18.
Старый 29.05.2012, 20:34   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mikki_messer Посмотреть сообщение
как-то делать выборки из таблицы SysClientSessions из класса, который запускается пользователем, не входящим в группу Admin? Dynamics Ax 2009.
А что если читать на сервере внутри unchecked(Uncheck::TableSecurityPermission) { }?

PS. Мда, фиг там.

Цитата:
Сообщение от mikki_messer Посмотреть сообщение
Имеет место полностью переписанная 2009 Axapta в которой механизм блокировки документов реализован с участием этой таблицы. Перед блокировкой документов, идёт проверка - нет ли заблокированных в данный момент документов, которые заняты "вылетевшими" пользователями. Вот для проверки и обращаемся к данной табличке
А как блокировка привязывается, по коду пользователя или по идентификатору сессии? Если последнее, то чем не подходит механизм, используемый при блокировке шапок журналов (точнее, при проверке, можно ли снять блокировку, там тоже анализируется, активна ли соотв. сессия)? Если же по коду пользователя, то, выходит, пока хоть одна сессия пользователя работает, блокировку снять нельзя? Может, в таком случае просто перебирать все сессии (объекты xSession) и смотреть, к какому пользователю они относятся?

Последний раз редактировалось gl00mie; 29.05.2012 в 20:47.
Старый 30.05.2012, 05:37   #11  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Дайте пользователю права на ключ AdminDaily - достаточно на просмотр. Можно дать права только на сам ключ, без дочерних элементов, при этом остальные ключи Admin* могут быть отключены. Мне помогло.
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: mikki_messer (1).
Старый 30.05.2012, 11:14   #12  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от SRF Посмотреть сообщение
Дайте пользователю права на ключ AdminDaily - достаточно на просмотр. Можно дать права только на сам ключ, без дочерних элементов, при этом остальные ключи Admin* могут быть отключены. Мне помогло.
Да, сам догадался так сделать. Спасибо!
За это сообщение автора поблагодарили: driller (0).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Solutions Monkey: Microsoft Dynamics AX 2012 EP - Admin Enhancements Blog bot DAX Blogs 0 29.09.2011 18:11
Вижу только пользователя admin в списке пользователей Bega DAX: Программирование 5 09.09.2010 15:38
emeadaxsupport: Unable to edit the DCOM settings for IIS WAMREG admin service on a Windows Server 2008 R2 when trying to configure Kerberos Authentication for Role Centers Blog bot DAX Blogs 0 27.01.2010 02:08
Настройка формы WMSJournalTable на чтение Saber DAX: Администрирование 0 27.06.2008 16:18
Забыли пароль "Admin"а? SimPai DAX: База знаний и проекты 4 11.11.2003 18:05

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

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

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