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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2013, 14:20   #1  
eastmouse is offline
eastmouse
Участник
 
10 / 13 (1) ++
Регистрация: 02.03.2009
Адрес: Казань
? ODBCConnection и LoginProperty в DAX2012
Прошу помощи по программному подключению через ODBC из AX2012. C аутентификацией SQL а не Windows.

Пытаюсь подключаться следующим образом:
X++:
    LPSrc = new LoginProperty();
    LPSrc.setDSN(tbl.DSN);

    if (tbl.UsrPwd == NoYes::Yes)
    {
        // Так тоже не подключается, точнее тоже пытается под пользователем домена
       /*sConnection = strfmt('Driver={SQL Server Native Client 11.0};'+
                              'Server=servername;'+
                              'Database=db_name;'+
                              'MultiSubnetFailover=No;'+
                              'Trusted_Connection=No;'+
                              'Uid=%1;Pwd=%2', tbl.Usr, tbl.Pwd);*/ 
        
        sConnection = strfmt("MultiSubnetFailover=No;"+
                              "Trusted_Connection=No;"+
                              "DSN=%1;"+
                              "Uid=%2;"+
                              "Pwd=%3", tbl.DSN, tbl.Usr, tbl.Pwd);
        
        
        LPSrc.setOther(sConnection);
    }

    CSrc = new OdbcConnection(LPSrc); // вот здесь ругается что не может подключиться под пользователем domain\user
при попытке подключения ругается : [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'домен\пользователь'.

Куда рыть? Что делаю не так?

Из Windows по настроенному DSN проверка подключения проходит успешно, с аутентификацией SQL.
Старый 25.09.2013, 14:43   #2  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
А на сервере разрешена аутентификация SQL?
Старый 25.09.2013, 14:45   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Выполнение кода на стороне SQL Server
__________________
// no comments
Старый 25.09.2013, 14:49   #4  
eastmouse is offline
eastmouse
Участник
 
10 / 13 (1) ++
Регистрация: 02.03.2009
Адрес: Казань
Цитата:
Сообщение от raz Посмотреть сообщение
А на сервере разрешена аутентификация SQL?
Разрешена, из настроек DSN на клиенте коннект проходит с аутентификацией SQL, а при использовании того-же DSN из AX ругается, хотя явно указываю SQL аутентификацию - Trusted_Connection=No.
Старый 25.09.2013, 14:57   #5  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
DSN настроен на клиенте, код тоже выполняется на клиенте?
попробуйте классический пример:

X++:
    LoginProperty loginProperty;
    OdbcConnection odbcConnection;
    
    ;

    // Set the information on the ODBC.
    loginProperty = new LoginProperty();
    loginProperty.setDSN("dsnName");
    loginProperty.setDatabase("databaseName");

    //Create a connection to external database.
    odbcConnection = new OdbcConnection(loginProperty);

Последний раз редактировалось handy-comp; 25.09.2013 в 15:01.
Старый 25.09.2013, 15:02   #6  
eastmouse is offline
eastmouse
Участник
 
10 / 13 (1) ++
Регистрация: 02.03.2009
Адрес: Казань
Цитата:
Интересное решение, но, БД может быть на другом сервере SQL не том-же где БД DAX.
Старый 25.09.2013, 15:10   #7  
eastmouse is offline
eastmouse
Участник
 
10 / 13 (1) ++
Регистрация: 02.03.2009
Адрес: Казань
Цитата:
Сообщение от handy-comp Посмотреть сообщение
DSN настроен на клиенте, код тоже выполняется на клиенте?
попробуйте классический пример:
Все на клиенте, в вашем примере будет использоваться аутентификация Windows, а мне нужно подключиться с аутентификацией SQL.
Старый 25.09.2013, 15:13   #8  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Цитата:
Сообщение от eastmouse Посмотреть сообщение
Все на клиенте, в вашем примере будет использоваться аутентификация Windows, а мне нужно подключиться с аутентификацией SQL.
Вы в настройках DSN указали способ прохождения проверки, логин пароль там же настроили?
Старый 25.09.2013, 15:25   #9  
eastmouse is offline
eastmouse
Участник
 
10 / 13 (1) ++
Регистрация: 02.03.2009
Адрес: Казань
Цитата:
Сообщение от handy-comp Посмотреть сообщение
Вы в настройках DSN указали способ прохождения проверки, логин пароль там же настроили?
Да.
Плюс в коде в строке подключения:

X++:
sConnection = strfmt("MultiSubnetFailover=No;"+
                              "Trusted_Connection=No;"+ // Аут. SQL
                              "DSN=%1;"+
                              "Uid=%2;"+ // пользователь
                              "Pwd=%3", // пароль
                               tbl.DSN, tbl.Usr, tbl.Pwd);
Старый 25.09.2013, 15:29   #10  
eastmouse is offline
eastmouse
Участник
 
10 / 13 (1) ++
Регистрация: 02.03.2009
Адрес: Казань
Решил проблему
На АОС-е настроили DSN для 64 и 32 версий (Win. Serv 64 используется)
Класс перевел в серверный.
Все заработало.
Спасибо всем за ответы.
Старый 25.09.2013, 15:56   #11  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Что заработало конечно хорошо, только так и не понял почему если в настройках DSN прямо указано использовать SQL проверку и настроены логи пароль, у вас все равно использовалась Windows аутентификация.
Старый 26.09.2013, 10:05   #12  
eastmouse is offline
eastmouse
Участник
 
10 / 13 (1) ++
Регистрация: 02.03.2009
Адрес: Казань
Цитата:
Сообщение от handy-comp Посмотреть сообщение
Что заработало конечно хорошо, только так и не понял почему если в настройках DSN прямо указано использовать SQL проверку и настроены логи пароль, у вас все равно использовалась Windows аутентификация.
Вот этого я тоже так и не понял.
Старый 02.02.2015, 15:19   #13  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Вопрос по соединению с PostgreSQL
Добрый день!
Ах2012R2
Подключаюсь к БД PostgreSQL через ODBCConnection:
X++:
server static void main(Args _args)
{
    OdbcConnection      connection;
    LoginProperty       login;
    ;

    login = new LoginProperty();
    login.setDSN('PostgreSQL-Test');
    connection = new OdbcConnection(login);

    if (!connection)
    {
        checkFailed("Ошибка при создании соединения");
    }
}
Выполнение на стороне сервера, настроено соотв. ODBC соединение на базе драйверов "PostgreSQL Unicode x64" v.9.03.03.
Соединение устанавливается и запросы работают, но при вызове new OdbcConnection(login) выдается сообщение об ошибке:
Код:
Невозможно выполнить требуемую операцию с базой данных.
База данных SQL обнаружила ошибку.
ERROR: syntax error at or near "@";
Error while executing the query. The SQL statement was: "declare @CONTEXT_INFO varbinary(128); select @CONTEXT_INFO = CAST (' kird 56 ODBC - read-only 0' as varbinary(128) );set CONTEXT_INFO @CONTEXT_INFO"
В PostgreSQL другие средства установки аналога CONTEXT_INFO, однако, похоже, new об этом не знает и пытается запустить данный запрос на базе после установки соединения.
Косметически можно вырезать лишние инфо, процедура работает, запросы отправляются, результаты обрабатываются.
Но хотелось бы как-то дать понять, что не надо устанавливать CONTEXT_INFO. Может, с помощью connectionString или каким-либо другим способом.

P.S.
На клиенте при использовании 32-ти разрядного драйвера ODBC такой ошибки нет.
Старый 02.02.2015, 18:16   #14  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Переделал на System.Data.Odbc объекты (AX 2012 R3 доступ к MySQL). Ошибки нет.
Старый 02.02.2015, 18:20   #15  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Lightbulb Connection context
Цитата:
Сообщение от Denicce Посмотреть сообщение
Код:
Невозможно выполнить требуемую операцию с базой данных.
База данных SQL обнаружила ошибку.
ERROR: syntax error at or near "@";
Error while executing the query. The SQL statement was: "declare @CONTEXT_INFO varbinary(128); select @CONTEXT_INFO = CAST (' kird 56 ODBC - read-only 0' as varbinary(128) );set CONTEXT_INFO @CONTEXT_INFO"
Есть подозрение, что это из-за включенного контекста соединения.
__________________
Axapta non erubescit
За это сообщение автора поблагодарили: Denicce (2).
Старый 03.02.2015, 08:31   #16  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
> Есть подозрение, что это из-за включенного контекста соединения
Так и есть
__________________
-ТСЯ или -ТЬСЯ ?
Старый 09.06.2015, 10:57   #17  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от handy-comp Посмотреть сообщение
Что заработало конечно хорошо, только так и не понял почему если в настройках DSN прямо указано использовать SQL проверку и настроены логи пароль, у вас все равно использовалась Windows аутентификация.
Цитата:
Resolution
Problem was escalated to escalation engineers where we confirmed the behavior of the application.
In AX 4.0 for the LoginProperty class, we had two properties on this class – setUsername & setPassword – these were the properties you used if you wanted to change the login, see link below…
http://msdn.microsoft.com/en-us/libr...(v=ax.10).aspx

In AX 2009 onwards, these were removed for security reasons – see link below, they setUsername and setPassword are no longer valid properties.
http://msdn.microsoft.com/en-us/libr...(v=ax.50).aspx

I have looked at the kernel code, and in AX 4.0 and before if you specified the setUsername and setPassword then the kernel would use these to create the ODBC connection. If they were not specified, then they would use the login for the AX AOS service (or with AX 3.0 or before the client login in two tier mode).

So as it is no longer possible to set these properties from AX 2009 onwards, the kernel will always use the login for the AOS service. So even if you try and set these in the “setOther” property on the LoginProperty class, they are ignored as in the connection string we create in the kernel code is always using trusted authentication of the AOS Service account – so these additional properties are ignored.
утащено отсюда
__________________
-ТСЯ или -ТЬСЯ ?
Теги
ax2012, odbc, odbcconnection

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Локальная функциональность для компании в DAX2012 Мирослав Лянцевич DAX: Функционал 2 20.02.2013 13:37
Проблемы с кэшированием inventSum в DAX2012 fed DAX: Администрирование 20 19.11.2012 17:56
Как дость max, min через odbcConnection miklenew DAX: Программирование 2 10.09.2008 14:09
ODBCConnection lyolea84 DAX: Программирование 10 28.02.2008 17:00
ODBCConnection Execute Select gb DAX in English 6 07.08.2005 00:00

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:02.