'Windows 자격 증명'을 사용하여 Linux에서 Python을 사용하여 MS SQL Server에 연결

StackOverflow https://stackoverflow.com/questions/539430

문제

Windows 도메인 자격 증명을 사용하여 Linux의 Python이있는 MS SQL Server 데이터베이스에 연결하는 방법이 있습니까?

Windows 자격 증명을 사용하여 Windows 컴퓨터에서 완벽하게 잘 연결할 수 있지만 Pyodbs + Freetds + Unixodbc를 사용하여 Linux Python에서 동일한 작업을 시도합니다.

>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")

이 오류가 발생합니다.

class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')

비밀번호가 올바르게 작성되었다고 확신하지만 사용자 이름의 여러 가지 조합을 시도했습니다.

DOMAIN\username
DOMAIN\\username

또는

UID=username;DOMAIN=domain

아무 소용이 없습니다. 어떤 아이디어?

도움이 되었습니까?

해결책

의견 중 하나에서 지적한 바와 같이,이 답변은 지금까지 매우 오래되었습니다. 정기적으로 정기적으로 GSSAPI를 사용하여 Linux에서 SQL Server 2008 R2로 인증하지만 대부분 EasySoft ODBC 관리자 및 (Commercial) Easysoft ODBC SQL Server 드라이버와 함께 사용합니다.

2009 년 초, 동료와 저는 MIT Kerberos 라이브러리의 특정 버전에 연결된 프리드 빌드를 사용하여 GSSAPI (Kerberos Credentials)를 사용하여 Solaris 10의 SQL Server 2005 인스턴스에 연결했습니다. 트릭은 - 그리고 이것은 믿기가 조금 어렵지만 freetds 소스 코드를 살펴보면서 그것을 확인했습니다. 제로 길이 사용자 이름. user_name 문자열의 길이가 0이면 Freetds 코드는 GSSAPI를 사용하려고 시도합니다 (해당 지원이 컴파일 된 경우). ODBC가 제로 길이의 user_name을 통과시키는 방법을 알 수 없었기 때문에 Python과 PyoDBC를 통해이 작업을 수행 할 수 없었습니다.

여기에는 Perl 코드에 .. .freetds.conf 등과 같은 Breakage WRT 구성 파일에 대한 여러 가지 기회가 있습니다. 교장이 대문자에 있어야한다는 것을 기억하는 것 같습니다. 그러나 내 노트는 그것에 동의하지 않는 것 같습니다.

$serverprincipal = 'MSSQLSvc/foo.bar.yourdomain.com:1433@YOURDOMAIN.COM';
$dbh = DBI->connect("dbi:Sybase:server=THESERVERNAME;kerberos=$serverprincipal", '', '');

SQL Server 서버가 적절한 보안 원명 이름을 사용하기 위해 SetSpn 유틸리티를 사용하는 방법을 알아야합니다.

우리의 환경은 kerberos 측면에 대한 지식이 없습니다. 우리의 환경은 kerberos guru에 의해 설정되었고 SQL Server가 실행중인 광고 도메인과 Kerberos 도메인 사이에 상호 신뢰와 같은 멋진 것들이 있습니다. 내 고객이 실행 중입니다.

코드가 있습니다 http://code.google.com/p/libsqljdbc-auth/ Linux에서 SQL Server까지 GSSAPI 인증을 수행하지만 Java 전용입니다. 저자 (그의 물건을 알고있는 것 같음)는 또한 JTDS 프로젝트와 유사한 패치를 제공했으며, 이는 GSSAPI가 내장 된 최근 버전의 Java와 함께 작동합니다.

그래서 조각들은 모두 거기에 있습니다. 그것은 단지 그들 모두가 함께 일하도록하려고 노력하는 큰 엉킨 혼란입니다. 나는 pyodbc에서 unixodbc에서 freetds odbc에서 tds 통합을 추적하기가 매우 어렵다는 것을 알았습니다. CT-Lib에서 상단에 꽤 얇은 포장지 였기 때문에 Perl 물건은 훨씬 쉽게 진행하기가 훨씬 쉬웠습니다.

다른 팁

최소한 2013 년 3 월 현재, 이것은 freetds와 함께 상자에서 벗어나는 것 같습니다. 나는 그것을 지정했다 TDS 프로토콜 버전 좋은 측정을 위해-그것이 차이를 만들지는 확실하지 않습니다.

connStr = "DRIVER={{FreeTDS}};SERVER={0};PORT=1433;TDS_Version=7.2;UID={1}\\{2};PWD={3}".format(hostname, active_directory_domain, username, password)

Linux 용 Microsoft의 공식 드라이버에서도 통합 인증이 지원되는 것으로 보입니다. http://msdn.microsoft.com/en-us/library/hh568450.aspx . 실제로 얼마나 많은 Linux 배포판이 작동하는지 또는 소스를 얼마나 많이 사용할 수 있는지 잘 모르겠습니다. 그들은 명시 적으로 Rhel 5와 6을 언급하고 페이지 다운로드.

아마도 당신을 도울 수 없을 정도로 너무 늦었을 것입니다. 그러나 나는 같은 문제를 겪었습니다. 작성 당시 PYODBC의 최신 버전을 사용하면 Windows 자격 증명으로 로그인 할 수 있습니다. 연결 문자열에 UID 필드를 비워 두십시오.

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=myserverinstance;DATABASE=mydatabase;UID=;PWD=mypassword')

이제 로그인 할 때 기존 Windows 자격 증명을 사용하고 있습니다 ... ARB Windows 도메인 자격 증명을 지정하는 방법은 확실하지 않습니다 ...

나는 한동안 그것을하지 않았지만, 나는 전체 unixodbc + freetds + pyodbc가 조금 까다로워 졌다는 것을 기억합니다. 그러나 수행 할 수 있으며 일단 설정하면 그렇게 어렵지 않습니다.

이 웹 사이트는 매우 좋은 지침을 제공합니다.http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-mssql.html (웹 아카이브에서 보관 된 사본)

또한 내 경험상 PYODBC는 64 비트 리눅스 머신에서 컴파일/실행 문제가있었습니다. 그로 인해 우리는 결국 CEODBC를 사용했습니다. CEODBC는 PYODBC만큼 안정적이지는 않지만 (Python Prorgram에서 실행할 때 PYODBC보다 예상치 못한 버그가 발생 함) Linux 64 비트에서 일어나기 쉽습니다.

이런 식으로 Windows 도메인 계정에 로그인 할 수 있다고 생각하지 않습니다. 이러한 자격 증명을 전달하는 방식으로 SQL로 직접 사용자를 설정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top