머신 A와 B가 있다고 가정 할때
머신 A는 게임 서버
머신 B는 디비 서버
A에서 B로 원격 디비 커넥션을 하려고 하는데 삽질 겁나게 했다.
방법을 정리하겠음.
일단 OS와 MSSQL 버전은 별로 상관 없음
내 플랫폼과 사용툴은 Windows8 Pro Eng, MS SERVER 2012 이다.
ODBC를 설정하지 않고 FILEDSN으로 연결 한다.
첫번째
MS SERVER2012 를 시작 한다.
원격지에서 접속 할 타겟 DB를 생성 한다.
(***MS SERVER이 영문버전이라 한글은 모르겠음)
사용자를 등록해야 한다. Security 폴더에 Logins 에 우클릭 하여 New Login... 을 클릭 한다.
사용자 등록을 한 뒤 아래 그림과 같이 따라서 설정한다. (이미지가 작아서 잘 안보인다면.. 클릭하면 원본 크기로 보임)
두번째
port 설정을 해줘야 한다.
기본적으로 1433 port를 사용 한다.
SQL Server Configuration Manager 를 실행한다.
아래 그림과 같이 따라한다.
세번째
파일 DSN 내용
File Name : Auth.dsn
[ODBC]
DRIVER=SQL Server
UID=auth
Network=DBMSSOCN
DATABASE=auth
APP=Microsoft Data Access Components
SERVER=192.168.0.4
UID에는 Database Logins 에 등록된 User Name을 적어준다.
네번째
코드 일부분 발췌 하겠음.
bool Auth::Connect() { string ConnectionStr("FILEDSN=.\\auth.dsn;"); string Pwd("1234"); ConnectionStr += string("PWD=") + Pwd; return m_ODBCCtrl.Connect( ConnectionStr ); } bool NODBCCtrl::Connect( const string in_ConnectionStr ) { if(true == m_bConnect) return false; SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_DBC,m_hEnv,&m_hDbc); if((SQL_SUCCESS != ret) && (SQL_SUCCESS_WITH_INFO != ret)) return false; SQLCHAR CompleteConnectionString[1024] = ""; ret = SQLDriverConnect( m_hDbc, //connection handle NULL,//window handle (SQLCHAR*)in_ConnectionStr.c_str(), SQL_NTS, //Null Terminate String CompleteConnectionString, sizeof(CompleteConnectionString), NULL, SQL_DRIVER_NOPROMPT); if((ret != SQL_SUCCESS) && (ret != SQL_SUCCESS_WITH_INFO)) { SQLFreeHandle(SQL_HANDLE_DBC, m_hDbc); m_hDbc = SQL_NULL_HDBC; return false; } m_bConnect = true; return true; }
다섯번째
이렇게 다 했는데도 안된다면
방화벽 설정을 해야 한다.
그 외..
만약 클라쪽에서 ODBC를 사용 하고 싶다면..
http://xxbdxx.blog.me/10169745764 요기 봐도 좋을듯.. 정리 잘해놓은듯
'프로그래밍 > Server' 카테고리의 다른 글
Socket Modes - blocking / non-blocking (0) | 2016.07.07 |
---|---|
윈도우 방화벽 새규칙 만들기 ( windows8 pro eng ) (0) | 2013.06.24 |
sctp, dccp 프로토콜 (0) | 2013.03.24 |
순차 패킷 소켓 (0) | 2013.03.24 |
소켓 옵션 (0) | 2013.03.24 |