手一抖,数据库密码被我整串贴进了聊天窗口

下午有个同事要连一台测试库,让我给连接信息。我顺手把地址、端口、库名、账号、密码拼成一整行,贴进聊天窗口,回车,发送。十秒后他连上了,回了句谢谢。

事情到这里很顺。不顺的是晚上我翻聊天记录找别的东西,那行字明晃晃跳出来,密码躺在正中间,跟着这条消息永久存了档。

聊天窗口是最差的密码通道

密码这东西有个特点:它不怕被用一次,怕被留一份。而聊天软件的本职工作就是留一份,而且留得比你想象中多。

我数了数风险在哪:

  • 全文可搜。三年后你搜个库名,那条带密码的消息自己跳出来,连你自己都忘了发过。
  • 多端同步。手机一份、桌面一份、平板一份,删了本地还有云端,云端还有备份。
  • 转发和截屏零成本。他要转给做数据的同事,一步的事。
  • 导出与审计。企业版的会话存档、离职交接时的聊天记录导出,都不经过你的同意。
  • 共享账号。他万一是用别人登着的窗口接的呢。

所以我给自己立了条规矩:聊天里发过密码,就当它已经泄露。不是「可能泄露」,是已经。处置只有一条路,轮换。

已经发出去了怎么办:轮换,但别原地改

很多人第一反应是 ALTER USER 直接把密码改掉。快,但有个坑:连接池里那些握着旧密码的活连接不会立刻死,接下来一段时间服务会间歇性报认证失败,改密码的人还在纳闷明明改成功了。

稳妥的顺序是建新、切换、删旧:

-- 1. 建个新账号,密码走新的
CREATE USER 'app_new'@'%' IDENTIFIED BY '<新密码>';
GRANT SELECT, INSERT, UPDATE ON `业务库`.* TO 'app_new'@'%';

-- 2. 改应用配置指向新账号,滚动重启或刷新连接池
-- 3. 观察一轮,确认没人再用旧账号连
DROP USER 'app_old'@'%';

旧账号删掉的那一刻,聊天记录里那行字才真正作废。它还躺在聊天里,但它连不上任何东西了。

交接密码的正确姿势

按省事程度排,总有一档适合你:

  1. 密码管理器的分享链接。他点开一次、自动填充,你随时可以撤销。
  2. 临时账号带过期时间。测试环境尤其合适,valid until 一写,忘了删也不会漏成永久后门。
  3. 一次性查看链接。看完即失效,很多托管平台自带。
  4. 分两条消息发,错开几分钟。聊胜于无,防的是随手转发那一屏截图。
  5. 明文整行贴。就是我下午干的事,排序垫底。

前三种都要点设置,第四种要忍着麻烦,第五种最快。我挑了最快的那条,代价是晚上翻记录时心里咯噔一下。

这次的三条笔记

  1. 聊天记录是档案,不是便签。发出去的任何东西都在为三年后的搜索结果打工,密码尤其如此。
  2. 泄露的处置是轮换,不是删除。删聊天记录删不掉对方的缓存和导出件,改密码才让那行字变成废纸。
  3. 轮换要走建新删旧。原地改密码是在服务的雷区里跳舞,新账号切完再删旧的,全程不断线。

顺带说一句,我给自己定这条规矩的时候一点不委屈。猫可以娇,凭证不能娇喵。