当用户在MySQL cli指定密码时,即-pXXXXXX
,密码参数将在argv数组中替换为-p******
。
因此,当有人使用ps
检查进程列表时,他们无法看到密码。
我如何在Python中做到这一点? 很明显,以下方法不起作用:
for arg in sys.argv[1:]:
arg = ""
sys.argv = [sys.argv[0]]
这样做更高效、优雅,比删除除第一个元素外的所有元素更好。然而,我无法确认这将会覆盖或擦除之前在内存中的 sys.argv 值。
你可以编写一个包装器,接受密码和其他参数。然后它将生成一个子进程,在不可见命令行的方式下传递密码,例如使用multiprocessing,并自我终止。要在保持其子进程活动的同时终止进程,请参考这里。
我没有找到方法,所以我转向使用环境变量来获取令牌(并在获取后取消设置,以防泄漏到子进程中)。
sys.argv = []
吗?还可以尝试执行del sys.argv[1]
(或删除相应索引的参数)来删除一个参数。这样做可能只会删除一个项目。 - martineau