我给客户写了一个本地上位机程序,客户要求有权限验证,意思就是这个上位机程序在用之前得登录,然后我就犯了难了!因为如果做本地登录的话,那么数据库也是保存在本地的,如果客户把账号密码忘了怎么办?然后我就跟客户沟通了好一会儿,最后客户不耐烦了,直接说先不管!

打开网易新闻 查看精彩图片

本地管理员密码忘了怎么办?

这个权限验证很简单,首先就是上位机程序的初始本地数据库有个管理员账号,管理员账号可以分配子账号,管理员有修改系统设置的权限,子账号只能做基本操作,无法更改系统设置。

我的担心是,因为系统用户是可以自己修改密码的,因为系统在初始化的时候会分配一个管理员账号和密码,为了安全起见,管理员肯定会修改密码。这时候,如果管理员把密码给忘了,如何找回密码就成了问题。

上位机程序一般都不连接外网,因此无法使用邮件对密码进行找回,当然,也不可以使用短信进行重置,可是,如果丢掉本地用来存储用户信息的数据库,虽然上位机软件会重新初始化一个新的管理员账户出来,但之前分配的用户权限信息也就全部丢了!

想出的方案都不可行

我想了个方案,是将管理员账户单独使用一个数据库存着,这样的话即使管理员的账号密码丢了,那么直接将管理员账户的数据库删掉,那么上位机软件就会重新初始化一个管理员账号出来。

但是,这个方案后来我想想就放弃了,因为很有可能会存在一种情况,那就是当有人想要以管理员身份登录软件的时候,他虽然不知道管理员账户的密码,可是他完全可以把管理员数据库给移走,这样系统就会又生成一个新的管理员初始化账户,这样就可以越过实际的管理员权限了。等一切操作完成以后,再把刚才初始化的管理员账户数据库给移走,将之前移走的管理员账户再移回来,神不知鬼不觉!

有了这个想法以后,我怎么也想不出这个管理员账号的密码忘了以后该怎么重置了,本来我还有一个替补方案,就是我写一个专门用来修改管理员账号密码的工具,只供管理员使用,如果这个工具泄露了,那么管理员自己担这个责任。

可能是我话太多了,客户那边将来要接管管理员账号的人听我这么说,连忙拒绝了我的这个方案!所以,这个方案也不行!而且,也会遇到上述问题!

如果没有办法让客户自己重置管理员账号密码,那么以我们客户的行为准则,可能就为了帮他们重置管理员账号密码,还要我们公司专门派人跑一趟客户现场。

后来,客户的一句话验证了我的担心:“一般情况下应该不会忘,实在不行就麻烦你们跑一趟!”。

听到这句话,我脸都绿了,虽然以后如果真的发生这种事情,公司不会派我去,但是去的那个同事肯定把我恨得牙痒痒!

小结

我们项目经理笑着跟我说:“有时候追求完美是好事,但是如果太完美了,有可能就是给自己找事了!”

后来,我了解到,我们公司以前做的上位机程序也有权限验证,数据也存在本地,客户上位机环境同样是不能连外网,连远程都条件都没有。这时候,我的同事的做法基本上和我一样,就是直接把管理员账户单独存在一个Sqlite数据库里面,如果密码真忘了就直接把数据库删了,这样系统就又会生成一个默认密码。但是,他们不管其他的,至今也没碰到过客户那边的管理员把密码给忘掉这件事情。

所以,你们觉得我是不是太钻牛角尖了呢?