我正在和一个同事开发一个涉及到数据库连接的脚本。我们想让代码独立于我们使用它的人,同时保持我们的密码是私有的,并且不必在工作日中反复验证。经过一些搜索(我们都是Python的新手),似乎可以使用keyring来实现这个目的,所以我从pip安装了它(很可能是库的1.2.2版本,基于我对安装日期的记忆)。在
问题是,当我尝试访问我存储的密码时,系统会提示我设置一个主密码来访问keyring,如下所示(从IDLE开始):
>>> import keyring
>>> keyring.set_password('Service', 'MyUsername', 'MyPassword')
Warning (from warnings module):
File "C:\Python27\lib\getpass.py", line 92
return fallback_getpass(prompt, stream)
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.
Please enter password for encrypted keyring:
设置密码后,我可以轻松地获取和设置密码,直到我重新启动shell。现在我必须再次输入主密码:
^{pr2}$输入主密码后,此身份验证仅在当前会话/重新启动之间持续。从命令行运行脚本时,更糟糕的是,每次运行脚本时,我都要进行身份验证。在这一点上,keyring并没有为我节省任何时间或精力,我怀疑它是否会使我的密码比记忆和手动输入更安全。在
在搜索解决方案之后,如果主密码与用户帐户的密码相同,keyring似乎会在Unix上自动进行身份验证,但这在Windows上对我不起作用。在
我是想让keyring做一些它不想做的事情,还是我的实现中有一个错误?在
我的经验似乎与另一个用户报告的情况相冲突,该用户声称,当应用程序试图访问相关问题中的keyring时,How does python-keyring work on Windows?没有提示他输入密码
您使用哪个后端?检查使用:
如果输出:
^{pr2}$那就是为什么它要请求密码。该模块找不到任何特定于平台的keyring来使用,因此它只是使用主密码加密您的密码,并将它们放入一个普通文件中。在
就我个人而言,我的脚本在无人值守的情况下运行比密码安全更重要,因此我编写了以下函数:
在使用
keyring
到set_password
或get_password
之前,如果您和我一样,使用不需要插入主密码的值来保护密码的安全,请运行此函数configureKeyring()
。在执行此操作之前,请理解您以明文形式存储密码的安全含义。在一个更好的长期解决方案可能是调查所有其他可用的后端,并安装适当的先决条件,以便可以使用不同的后端,如果存在一个不需要输入主密码且只需登录就足够了。在
相关问题 更多 >
编程相关推荐