一、问题
grafana里忘记密码该怎么处理
二、解决方法
1.直接改数据库
find / -name "grafana.db"
# 进入到指定的目录
# 登陆数据库
sqlite3 grafana.db
# 查看表名
.tables
# 更改密码
update user set password = '7e8b589037feaaff7a7eac549656f3090bd1e30272816798fe74818c0cd8732c89fb8eaaa956ff6bb5f04e1afd7aae6c9fb9' where login = 'admin';
2.基于命令修改
# 1.修改密码为admin123
grafana-cli admin reset-admin-password admin123
# 2.重启服务
systemctl restart grafana-server
三、特殊情况
1.现象
# 有时步骤一的更改并不能生效,可以改成如下更改
update user set password = '7e8b589037feaaff7a7eac549656f3090bd1e30272816798fe74818c0cd8732c89fb8eaaa956ff6bb5f04e1afd7aae6c9fb9', salt = 'YZ2PEee4in' where login = 'admin';
2.解释
2.1 grafana加密方式
https://github.com/grafana/grafana/blob/3a7fc80948e630c0f88edccba54d66acacf6d724/pkg/login/grafana_login.go
https://github.com/grafana/grafana/blob/23956557d8c6a119b7de5be5c42024e29634d002/pkg/util/encoding.go
// EncodePassword encodes a password using PBKDF2.
func EncodePassword(password string, salt string) (string, error) {
newPasswd := pbkdf2.Key([]byte(password), []byte(salt), 10000, 50, sha256.New)
return hex.EncodeToString(newPasswd), nil
}
2.2 salt定义
salt的定义可以从下面这篇文章看出
https://blog.csdn.net/softuse/article/details/76619613
我的理解,salt的意思就是在原有密码的某些位置加入了一段字符串,然后对这个结果进行加密操作,这样别人即使反向解密了也不会拿到你真实的密码
所以当salt不同的时候,你即使password的数值是对的,加密后的最终结果也是不对的,这个就是为什么要改salt的原因