Имя: Пароль:
1C
1С v8
Проблема делегирования прав (запрос к БД на др. сервере)
0 SergeyKVM
 
13.10.11
07:03
При попытке из 1С через ВК обратиться к БД (SQL) другого приложения вылетает ошибка:
Ошибка подключения к серверу баз данных [ИмяСервера]!
Login failed for user 'NT AUTHORITY\АНОНИМНЫЙ ВХОД

Прочитал, что для делегирования прав необходимо вызвать функцию API
CoInitializeSecurity(NULL,-1,NULL,NULL,RPC_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_DELEGATE, NULL,0,NULL);

ИЛИ
CoInitializeSecurity( NULL, -1, NULL, NULL, 1, 4, NULL, 0, NULL)

Функция как я понял, располагается в ole32.dll


пытался вызвать данную функцию через WScript.Shell
через DynamicWrapperX
Например:
Wrap.Register("ole32.DLL", "CoInitializeSecurity",Неопределено , -1,NULL ,NULL, 1, 4,NULL, 0,NULL);
при таком вызове выдается ошибка: Типы не совпадают (12)
меняю типы на Неопределено, или 0 система вылетает в дамп, или если я ставлю ТГД

Собственно в результате возникло 2 вопроса:
1. Как можно делегировать права, чтобы в запросе к серверу сервер понимал логин и пароль от кого запрос. (как можно это сделать средствами Windows-а) у меня стоит Win 7.

2. Как всетаки лучше вызвать эту функцию api и какие передавать параметры
1 Азат
 
13.10.11
07:15
а зачем так сложно? просто через адо незя?
2 SergeyKVM
 
13.10.11
07:25
(1) нет,  структуру базы не знаю (+ др. сложности) Про ADO думал, но это слишком трудозатратно.
есть com компонента стороннего приложения, которая уже реализует нужные мне функции, ее и использую (проблем с запуском данной компоненты на сервере - нет) проблемы возникают при запуске на локальной машине.
3 SergeyKVM
 
13.10.11
10:16
upp
4 SergeyKVM
 
13.10.11
10:50
Описание функции в MSDN:
HRESULT CoInitializeSecurity(
 __in_opt  PSECURITY_DESCRIPTOR pSecDesc,
 __in      LONG cAuthSvc,
 __in_opt  SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
 __in_opt  void *pReserved1,
 __in      DWORD dwAuthnLevel,
 __in      DWORD dwImpLevel,
 __in_opt  void *pAuthList,
 __in      DWORD dwCapabilities,
 __in_opt  void *pReserved3
);

Делаю
Wrap.Register("ole32.DLL", "CoInitializeSecurity","i=pippuupup");
Wrap.CoInitializeSecurity(, -1,, , 1, 4,, 0,);    

Ругается:
Ошибка при вызове метода контекста (Register)
   Wrap.Register("ole32.DLL", "CoInitializeSecurity","i=pippuupup");
по причине:
Неизвестная ошибка

я неправильно указываю типы или в чем проблема?
Независимо от того, куда вы едете — это в гору и против ветра!