我使用以下代码创建与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)
使用管理员帐户运行服务。
答案 1 :(得分:0)
错误消息中的答案!如果您不熟悉服务帐户和SQL Server,这些事情可能是一个挑战。如果您无法打开登录中指定的数据库,通常是以下之一:
最简单的解决方案是记录您的服务正在运行的Windows帐户,然后在您的服务尝试连接的SQL Server中检查是否存在同一帐户作为登录。如果没有,那就是你的问题,你只需要创建登录,并确保它在数据库中有一个关联的用户(登录只会让你进入服务器,而不是数据库)。 但是,如果登录确实存在,请检查a)数据库是否存在,b)(重要!)该数据库中存在映射到服务帐户登录的用户。
除此之外,以前关于使用具有管理员权限的帐户运行服务的答案不太可行,除非您使用的是旧版本的SQL Server。 Windows系统管理员自动具有对数据库服务器及其数据的自动权限的能力很久以前就已被删除,因此使用Windows管理员帐户将无法正常工作,或者如果有的话,将无法继续使用。
如果这不能解决问题,请告诉我。