>> SDE에 올라가있는 데이터의 경우에 필요한 것이 서버정보(IP), 인스턴스(esri_sde), USER, PASSWORD 인데.. 다른건 모두 저장하면 되는데.. 문제는.. PassWord 였다.. 사용자에게 입력받기도 그렇고.. 그렇다고 매번 데이터를 사용할때 마다 PassWord를 입력받기도 그렇고..
>> 일단 다음 코드로 SDE WorkSpace의 ConnectionString을 보았다.
1: IDataset pWSDataSet = (IDataset)pDestDS.Workspace;
2: IWorkspaceName2 pWorkspaceName = (IWorkspaceName2)pWSDataSet.FullName;
3:
4: string sConStr = pWorkspaceName.ConnectionString;
>> 결과는 다음과 같다.
ENCRYPTED_PASSWORD=0002c45e2fbea2776344f09010b76e10bc831a5900;SERVER=192.xxx.xxx.xxx;INSTANCE=esri_sde;USER=kopss_ws;VERSION=SDE.DEFAULT;AUTHENTICATION_MODE=DBMS
>> ENCRYPTED_PASSWORD : 사용자가 입력한 PassWord 를 암호화 하여 저장하고 있다.
>> 구글링 및 EDN을 뒤져봤지만 Arc에서 암호화된 값을 복호화하는 방법은 찾을 수 없었다.
>> 결국 SDE 접속할때 강제로 암호화된 값(0002c45e2fbea2776344f09010b76e10bc831a5900)을 넣어 줬다.. 당연히 접속이 안된다.. ㅜㅜ
>> 그런데 의외로 방법은 간단했다.
>> 암호화된 ConnectionString을 그대로 저장했다가 다음 접속시 아래 코드처럼 ConnectionString 으로 접속이 가능했다..
1: /// <summary>
2: /// SDE ConnectionString 으로 SDE Worksapce를 반환
3: /// </summary>
4: /// <param name="connStr">커넥션 스트링</param>
5: /// <returns>IWorkspace</returns>
6: public static IWorkspace OpenSDEWorkspaceByConStr(string connStr)
7: {
8: IWorkspace workspace = null;
9:
10: try
11: {
12: IWorkspaceFactory pWSF = new SdeWorkspaceFactoryClass();
13: IWorkspaceFactory2 pWSF2 = (IWorkspaceFactory2)pWSF;
14:
15: workspace = pWSF2.OpenFromString(connStr, 0);
16: }
17: catch (Exception Ex)
18: {
19: System.Diagnostics.Debug.WriteLine(Ex.Message);
20: }
21:
22: return workspace;
23: }
>> 결국 SDE에 접속하기 위한 암호를 알아낼 수는 없지만 ConnectionString을 통해 암호는 몰라도 접속은 가능했다.
댓글 없음:
댓글 쓰기