2017-12-05 22 views
0

다음 코드를 사용하여 SQL Server 데이터베이스에 연결합니다. 방금 플라스크 응용 프로그램을 실행할 때 제대로 작동합니다.Windows 서비스로 실행할 때 Pyodbc SQL Server 연결이 작동하지 않습니다.

cnxn = pyodbc.connect(driver='{ODBC Driver 13 for SQL Server}', 
         server='my_user', 
         database='my_db', 
         username='my_username', 
         password='pass', 
         trusted_connection='yes' 
        ) 

하지만 지금은 nssm 도구를 사용하여 Windows 서비스를 만들었습니다. 이 서비스는 단지 .bat 파일을 실행하며 서비스를 시작합니다.

pyodbc.InterfaceError: ('28000', '[28000] [Microsoft][ODBC Driver 13 for SQL Server] 
[SQL Server]Login failed for user \'WORKGROUP\\my_user$\'. (18456) (SQLDriverConnect); 
[28000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Cannot open database 
"my_db" requested by the login. 
The login failed. (4060); [28000] [Microsoft] 
[ODBC Driver 13 for SQL Server]Invalid connection string attribute (0); 

어떻게 가능합니까?

답변

0

관리자 계정으로 서비스를 실행하십시오.

0

답변은 오류 메시지에 있습니다! 서비스 계정 및 SQL Server에 익숙하지 않은 경우 이러한 문제가 발생할 수 있습니다. 로그인에 지정된 데이터베이스를 열 수 없으면 대개 다음 중 하나가됩니다.

  1. 연결 문자열에 지정된 데이터베이스 이름이 없습니다.
  2. 사용중인 로그인에 매핑 할 사용자가 데이터베이스에 지정되어 있지 않습니다.
  3. 코드가 이전에 개발 된 Windows 서비스 계정과 다른 Windows 서비스 계정으로 응용 프로그램 (이 경우 서비스)을 실행하고 (예 : Windows 서비스 계정) 계정에는 SQL Server에 정의 된 로그인 및/또는 사용자 (로그인의 경우 서버 수준) 또는 로그인이 존재하는 경우 데이터베이스 수준.

가장 간단한 해결책은 서비스가 실행중인 Windows 계정을 기록한 다음 서비스가 연결하려는 SQL Server에 로그인과 동일한 계정이 있는지 확인하는 것입니다. 그렇지 않으면 문제가 생겨 로그인을 만들고 데이터베이스에 연결된 사용자가 있는지 확인해야합니다 (로그인은 데이터베이스가 아니라 서버로만 연결됩니다). 그러나 로그인이 존재하는 경우 a) 데이터베이스가 있고 b) (중요!) 서비스 계정 로그인에 매핑되는 해당 데이터베이스에 사용자가 있는지 확인하십시오.

이전 버전의 SQL Server를 사용하는 경우를 제외하고 관리자 권한이있는 계정으로 서비스를 실행하는 방법에 대한 이전 답변은 거의 적용되지 않습니다. Windows 시스템 관리자가 데이터베이스 서버 및 해당 데이터에 대한 자동 권한을 오래 가지 않도록 자동으로 처리 할 수 ​​있으므로 Windows 관리자 계정을 사용하면 작동하지 않거나 향후에 사용할 수 없습니다.

해결되지 않는 경우 알려주세요.