29.05.2012, 12:39 | #1 |
Участник
|
Разрешить чтение SysClientSessions не из под Admin
Добрый день, Коллеги.
Подскажите, пожалуйста, возможно ли как-то делать выборки из таблицы SysClientSessions из класса, который запускается пользователем, не входящим в группу Admin? Dynamics Ax 2009. |
|
29.05.2012, 14:42 | #2 |
Участник
|
Точно можно сделать это через 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))); } Последний раз редактировалось Dark Light; 29.05.2012 в 14:49. |
|
29.05.2012, 14:52 | #3 |
Участник
|
при построении и выполнении запроса в коде, никак не проверяются права доступа на таблицы
|
|
29.05.2012, 14:58 | #4 |
MCT
|
А для чего собственно такие выкрутасы ... может озвучите полное требование и поищем, как сделать системными вещами
__________________
Axapta book for developer |
|
29.05.2012, 15:06 | #5 |
Участник
|
|
|
29.05.2012, 15:09 | #6 |
Участник
|
Имеет место полностью переписанная 2009 Axapta в которой механизм блокировки документов реализован с участием этой таблицы. Перед блокировкой документов, идёт проверка - нет ли заблокированных в данный момент документов, которые заняты "вылетевшими" пользователями. Вот для проверки и обращаемся к данной табличке
|
|
29.05.2012, 15:10 | #7 |
Участник
|
Цитата:
Сообщение от 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))); } |
|
29.05.2012, 16:40 | #8 |
Участник
|
запустить проверку из-под runas()
|
|
29.05.2012, 18:01 | #9 |
MCT
|
Цитата:
Сообщение от mikki_messer
Имеет место полностью переписанная 2009 Axapta в которой механизм блокировки документов реализован с участием этой таблицы. Перед блокировкой документов, идёт проверка - нет ли заблокированных в данный момент документов, которые заняты "вылетевшими" пользователями. Вот для проверки и обращаемся к данной табличке
Там есть и блокировка и снятие блокировки и просмотр, кем блокировано. Может быть не совсем просто в реализации, но более оправдано чем обходные трюки с инициализацией соединения с базой данных в обход приложения. Просто так понравится может, что уже всю логику будете в хранимках держать. ЗЫ В коде на уровне базы данных нет возможности ставить ключи доступа и RLS, а так же теряется информация о том, кто и зачем менял. Уж если не найдете другого варианта, то обязательно оберните код в try catch и ловите исключения
__________________
Axapta book for developer Последний раз редактировалось MikeR; 29.05.2012 в 18:18. |
|
29.05.2012, 20:34 | #10 |
Участник
|
Цитата:
PS. Мда, фиг там. Цитата:
Сообщение от mikki_messer
Имеет место полностью переписанная 2009 Axapta в которой механизм блокировки документов реализован с участием этой таблицы. Перед блокировкой документов, идёт проверка - нет ли заблокированных в данный момент документов, которые заняты "вылетевшими" пользователями. Вот для проверки и обращаемся к данной табличке
Последний раз редактировалось gl00mie; 29.05.2012 в 20:47. |
|
30.05.2012, 05:37 | #11 |
Участник
|
Дайте пользователю права на ключ AdminDaily - достаточно на просмотр. Можно дать права только на сам ключ, без дочерних элементов, при этом остальные ключи Admin* могут быть отключены. Мне помогло.
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: mikki_messer (1). |
30.05.2012, 11:14 | #12 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: driller (0). |
|
|