2013-04-11 6 views
0

Sybase 데이터베이스를 사용하여 로컬 (원격) 데이터베이스를 서버의 중앙 집중식 통합 데이터베이스와 동기화하려고합니다. 동기화는 예정된 시간에 일어나야하며 "CreateProcessByUser"를 사용하고 있습니다. 동기화 프로세스를 시작하려면 sybase가 제공 한 dbremote.exe를 사용하고 있습니다.서비스의 CreateProcessAsUser에 원격 시스템에 액세스하는 보안 문제가 있습니다.

구축 된 커맨드의 인수이다
커맨드 = dbremote.exe -l 512K -x -k -c "DSN = HOME * * , UID = 된 DBA; PWD = *** ; CS = 없음; DBKEY = *** "-OS 10000000 -o"C : \ 데이터 \ 테스트 \의 dbremote.log ""C : \ 데이터 \ 테스트 "

BOOL startA_Process(HANDLE hToken, _TCHAR *commandLine, PROCESS_INFORMATION *pi, BOOL wait, _TCHAR *errBuf){ 

STARTUPINFO sStartupInfo; 

DWORD dwExitCode; 
DWORD dwStatus  = 0; 
DWORD dwCreationFlags = CREATE_NEW_CONSOLE; 
int  iResult; 
BOOL bInheritHandles = FALSE; 

LPCTSTR  pszApplicationName  = NULL; 
LPCTSTR  pszCurrentDirectory  = NULL; 
LPVOID  pvEnvironment   = NULL; 

LPSECURITY_ATTRIBUTES psProcessAttributes = NULL; 
LPSECURITY_ATTRIBUTES psThreadAttributes = NULL; 

// 
// Initilize STARTUPINFO structure 
// 
ZeroMemory(&sStartupInfo, sizeof(sStartupInfo)); 
sStartupInfo.cb = sizeof(sStartupInfo); 
sStartupInfo.lpTitle = _T("AutoSychDBRemote"); 
sStartupInfo.lpDesktop = _T("winsta0\\default"); 
// 
// Initilize PROCESS_INFORMATION structure 
// 
ZeroMemory(pi, sizeof(PROCESS_INFORMATION)); 

iResult = ::CreateProcessAsUser(
    hToken,      // handle to a token representing the logged-on user 
    pszApplicationName,    // name of executable module 
    (LPTSTR)commandLine,   // command line string 
    psProcessAttributes,   // process security attributes 
    psThreadAttributes,    // thread security attributes 
    bInheritHandles,    // whether new process inherits handles 
    dwCreationFlags,    // creation flags 
    pvEnvironment,     // pointer to new environment block 
    pszCurrentDirectory,   // pointer to current directory name 
    &sStartupInfo,     // pointer to STARTUPINFO 
    pi        // pointer to PROCESS_INFORMATION 
); 

프로세스가 원격 컴퓨터에 실행되고 동기화가 발생하면 원격 데이터베이스와 통합 데이터베이스간에 메시지를 교환해야합니다.

위 명령 줄을 windows 명령 프롬프트에서 실행하면 동기화가 성공적으로 수행됩니다. 예약 된 시간에 CreateProcessAsUser에 의해 트리거 될 때하지만 난 로그 파일에 오류 메시지가 아래를 참조하십시오

로그 파일 :

I. 2013년 4월 11일 11시 17분 11초합니다. "BTI"로 메시지 보내기
I. 2013-04-11 11:17:11. \\ IPaddress \ Databases \ Production \ messages \ consolidated \ Rem00005.g " 실패 1326 : 잘못된 인수
I. 2013-04-11 11:17:11. sopen "\\ IPaddress \ Databases \ Production \ messages \ consolidated \ Rem00005.h" 실패 1326 : 잘못된 인수
I. 2013-04-11 11:17:13. \\ IPaddress \ Databases \ Production \ messages \ consolidated \ Rem00005.i " 실패 1326 : 잘못된 인수
I. 2013-04-11 11:17:13. sopen "\\ IPaddress \ Databases \ Production \ messages \ consolidated \ Rem00005.j" 실패 1326 : 잘못된 인수
I. 2013-04-11 11:17:13. sopen "\\ IPaddress \ Databases \ Production \ messages \ consolidated \ Rem00005.k" 실패 1326 : 잘못된 인수
E. 2013-04-11 11:17:13. 메시지를 보내는 중 오류가 발생했습니다.
I. 2013-04-11 11:17:13. 재전송 요청이 대기 중입니다
I. 2013-04-11 11:17:14. 실행이


완료 "\\ IP 주소 \ 데이터베이스 \ 생산 \ 메시지 \ consolid"나는 이것에 도움을 요청 원격 시스템에서 메시지

을 복사하는 서버의 폴더입니다. 명령 프롬프트에서 왜 'CreateProcessAsUser'에서 동기화 할 수 있습니까? 프로세스가 서버의 위 경로에 메시지를 보내지 못하는 이유는 무엇입니까? 난 이미 시도

몇 가지 :

  1. 나는 로그인-에서하고있는 코드 내 Windows 도메인 이름과 자격 증명을 사용하여 응용 프로그램과의 :: LogonUser를 사용하여(). 나는 유효한 신임장을 보내고 있다는 것을 두 번 확인했습니다.

  2. 탐색기를 사용하면 서버의 위 경로로 성공적으로 이동할 수 있으며 파일을 추가/제거 할 수 있습니다.

  3. 관리 도구 >> 로컬 보안 정책의 "로컬 보안 설정"에 사용자 ID를 추가했습니다.

모든 의견을 환영합니다.

답변

1

나는 대답을 알아낼 수있었습니다 : 내 원격 데이터베이스와 통합 데이터베이스는 서로 다른 도메인에 속한 서로 다른 두 대의 컴퓨터에있었습니다. 원격 데이터베이스에 로그인 한 사용자가 통합 된 컴퓨터의 폴더에 액세스 할 수 없습니다. 통합 된 시스템에 대한 사용자 액세스 권한을 부여하면 문제가 해결되었습니다.