2011-08-09 7 views
0

우리는 서버 구성 요소가 데이터베이스 (응용 프로그램 서버 없음) 인 클라이언트 - 서버 응용 프로그램에 대한 라이선스 시스템을 개발 중입니다. 다른 서버에 설치할 수 없거나 백업/복원을 통해 전송할 수없는 특정 서버에 라이센스를 발급하고 싶습니다. 이 아이디어는 T-SQL 쿼리를 통해 단일 식별자를 생성 한 다음 공개/개인 서명을 사용하여 해당 식별자에 대해서만 작동하는 활성화 토큰을 반환하는 것입니다.T-SQL을 통해 SQL Server 컴퓨터를 고유하게 식별

CLR 저장 프로 시저 또는 함수없이 T-SQL 만 사용하여 반복적으로 SQL Server를 고유하게 식별하는 방법이 있습니까? 예를 들어, 인스턴스가 설치 될 때 생성되는 검색 가능한 고유 한 값이 있습니까?

: MAC 부분이 NEWSEQUENTIALID() 일 수도 있습니다 (this method 참조). 클러스터/페일 오버 설정에서 시스템이 장애 조치되거나 기본 LAN 어댑터가 변경된 경우 새 하드웨어에서 다시 활성화 될 때까지 계속 작동하는 동안 "유예 기간"이 될 수 있습니다. 문제는 이것이 "충분히 독특함"인지 여부입니다.

+1

클러스터/장애 극복을 잊지 마십시오. 머신과 db 사이에 1 : 1이 반드시 필요하지는 않습니다. –

+0

사실, 좋은 지적입니다. 클러스터 또는 장애 조치 설정의 모든 인스턴스에서 동일한 ID가 반환되는 것이 가장 좋습니다. –

+2

독특한 하드웨어 정보가 SQL 서버에 직접 노출되지 않으므로 어떤 대답이라도'xp_cmdshell'이 필요하다고 생각합니다 – JNK

답변

-2

고유 ID를 얻더라도 잠재적 인 문제는 T-SQL의 유효성 검사입니다. 데이터베이스가 확인되지 않았습니다. T-SQL을 해킹하고 활성화 부분을 제거하면 어떨까요? 고객이 T-SQL을 직접 사용하거나 클라이언트 응용 프로그램을 가지고 있습니까? 클라이언트 응용 프로그램이있는 경우 CLR은 옵션이 아닙니다. 그것은 크랙 가능했지만 설치시 서버 이름의 해시를 생성하고 데이터베이스에 저장 한 응용 프로그램과 함께 작업했습니다. 그런 다음 클라이언트는 저장된 해시와 동적 해시를 비교하여 다른 서버에 있는지 확인합니다. 문제는 서버 이름이 같고 이길 수 있고 해시 알고리즘이 클라이언트 응용 프로그램에 있었기 때문에 노출 될 수있는 노력이었습니다.

아디안 내 질문에 답해 주셔서 감사합니다.

sysObjects 및 다른 시스템 테이블/뷰를 보면 서버와 데이터베이스를 고유하게 식별 할 수있는 항목을 찾을 수 있다고 생각합니다. 다른 서버로 복원 할 때와 마찬가지로 사용자를 삭제하고 이름이 동일하더라도 내부 ID가 다르더라도 사용자를 다시 만들어야합니다. 마스터 및 응용 프로그램 데이터베이스를 복원 한 경우 모든 것을 동일하게 만들 수는 있지만이를 수행해야합니다. 기본 설치에서 SQL은 복제, 기타 기능 및 라이센스에 대한 고유 ID를 Microsoft에서 원할 것임에 따라 고유 한 ID를 어딘가에 생성 할 수 있습니다.

+1

이것이 답이라고 확신하지 못합니까? – JNK

+0

@JNK 예, 대답입니다. 한 가지 옵션은 설치시 서버 이름의 해시와 함께 서버 이름을 데이터베이스의 테이블에 작성하는 것입니다. 그런 다음 클라이언트는 독립적으로 해시를 만들어 데이터베이스의 해시와 비교할 수 있습니다. 나는이 솔루션에는 결함이 있지만 아직도 대답하고 있다고 지적한다. 아래 표결에 대한 기준은 "심각하게 엉성하거나 노력하지 않은 게시물이나 명확하고 위험 할 정도로 잘못된 답변을 발견 할 때마다 투표하십시오." 내 대답은 어떻게 투표를 정당화합니까? 어떻게이 "위험한 부정확"입니까? – Paparazzi

+0

몇 가지. ** 1 ** - Downvotes는 "유용하지 않은"답변입니다. 나는 이것이 자격이 있다고 생각한다. 원본 설치와 일치하도록 서버 이름을 변경하고 해시를 건너 뛸 수 있습니다. ** 2 ** - 이전에 downvote를 적용하지 않았지만 지금입니다. 건배! – JNK

관련 문제