2017-12-05 28 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サービスアカウント)アカウントにはログインのサーバーレベルで、またはログインが存在する場合はデータベースレベルで、SQL Serverで定義されたログインおよび/またはユーザー。

最も簡単な解決策は、サービスが実行されているWindowsアカウントを記録し、サービスが接続しようとしているSQL Serverに同じアカウントがログインとして存在することを確認することです。そうでなければ、それはあなたの問題です。ログインを作成し、それがデータベースに関連付けられたユーザーを持っていることを確認するだけです(ログインはデータベースではなくサーバーに移動します)。 ただし、ログインが存在する場合は、a)データベースが存在し、b)(重要!)そのデータベースにサービスアカウントのログインにマップされているユーザーが存在することを確認します。

古いバージョンのSQL Serverを使用している場合を除いて、管理者権限を持つアカウントでサービスを実行することについての前回の回答は、うまくいかない可能性があります。 Windowsシステム管理者がデータベースサーバーとそのデータに対する自動権限を持つことは、以前から削除されていたため、Windows管理者アカウントを使用することはできません。

これで解決できない場合は教えてください。

関連する問題