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