在Windows Server 2003上使用python密钥环时出现错误1312

2024-03-29 08:35:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python编写一个Windows服务,并使用keyring模块来安全地存储需要定期持久使用的凭证。这意味着keyring使用本地系统用户凭据存储密码。在

我所做的就是使用两个基本的keyring函数:get_password(SERVICE_NAME, username, password)set_password(SERVICE_NAME, username)。我没有预先配置keyring,因为我了解它,并看到它自动配置其后端。在

当我在WindowsServer2008上运行这个程序时,一切都很顺利。但当我在Windows Server 2003上运行此程序时,我遇到了一个严重的错误:

error: (1312, 'CredWrite', 'A specified logon session does not exist. It may already have been terminated.')

我假设它与用于运行我的服务的本地系统用户的登录会话有关,尽管它很奇怪,因为我知道它是一种超级管理员超级用户,应该有权限在系统中做任何事情。但是,当我将用户的登录凭据更改为本地管理员时,一切都很顺利。在

我需要在我的服务配置中进行一些更改才能使其正常工作吗?或者更改本地系统用户的安全策略?还是应该要求用户使用本地管理员凭据运行此服务?在


Tags: 模块函数用户name程序密码getwindows
1条回答
网友
1楼 · 发布于 2024-03-29 08:35:35

在WindowsServer2003中,本地系统用户似乎有一个限制,即不能访问保存凭据的Windows机制(也称为凭据保险库)。在

keyring的Windows默认后端是使用这个内置的Windows保险库机制,而这正是创建这个机制的原因,也是触发Windows异常的原因。在

此问题的解决方案是使用另一个名为Win32CryptoKeyring的密钥环后端,如下所示:

keyring.set_keyring(keyring.backend.Win32CryptoKeyring())

此后端使用Win32加密API安全地保存凭据,因此从安全角度来说,它与使用Windows Vault机制一样安全。区别只是凭据保存到的位置。我不知道证件保存在哪里,但事实证明这与我的案子无关。在

需要再次注意的是,只有在Windows Server 2003下使用本地系统用户的Windows Vault时,才会出现此错误。在较新的Windows版本上,这个功能非常好,对于windowsserver2003上的其他用户来说,它也非常好用。在

如果您希望跨平台而不使用多个安全机制来保存代码中的凭据,那么在较新版本的Windows上使用Win32CryptoKeyring后端也可以很好地工作。在

相关问题 更多 >