我使用以下代码来创建与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);
怎么可能?
使用管理员帐户运行服务。
错误消息中的答案!如果您不熟悉服务帐户和SQL Server,这些事情可能是一个挑战。如果您无法打开登录中指定的数据库,则通常是其中之一:
- 不存在连接字符串中指定的数据库名称。
- 数据库中没有指定用户可以将您映射到您使用的登录。
- 您正在以不同的Windows Service帐户的方式运行该应用程序(在这种情况下为您的服务))帐户在SQL Server中没有登录和/或用户,如果存在登录名,则在服务器级别或数据库级别处于数据库级别。
最简单的解决方案是记录您的服务正在运行的Windows帐户,然后在您的服务试图连接到的SQL Server中检查相同的帐户作为登录。如果不是这样,那就是您的问题,您只需要创建登录名,并确保它在数据库中具有关联的用户(登录仅可让您进入服务器,而不是数据库)。但是,如果登录确实存在,请检查a)数据库是否存在并且b)(重要!)该数据库中存在将映射到服务帐户登录的数据库。
顺便说一句,除非您使用旧版本的SQL Server,否则先前关于使用具有管理员特权的帐户运行服务的答案不太可能起作用。Windows sysadmins具有自动权限的数据库服务器的自动功能,并且很久以前就删除了其数据,因此使用Windows Administrator帐户将不起作用,或者如果这样做,则将不做证明。
。让我知道是否没有修复。