Grafana重置admin用户密码
适用范围
- Grafana
- TiDB v5.4.0
问题概述
客户现场安装TiDB v5.4.0版本,在使用grafana查看监控指标时,admin用户的默认密码无法登录;通过CLI进行密码重置,重置后的密码未生效,还是无法登录。
解决方案
在网上查找资料,确认通过修改 grafana 的资料库 grafana.db
中的user表可以进行密码修改,但是表中记录的密码是密文,在 github 上查找加密方式,通过编写脚本实现根据自己的salt对明文密码进行加密,然后更新user表实现重置admin密码的需求。
grafana加密函数可以查看:https://github.com/grafana/grafana/blob/39b32524e2f6e08512a78d8efa98042d6b048cee/pkg/util/encoding.go
通过Go实现加密,指定明文密码和salt值,输出密文密码,具体实现如下:
grafana_encode_pwd.go
package main
import (
"crypto/sha256"
"encoding/hex" "flag" "fmt" "golang.org/x/crypto/pbkdf2")
func main() {
var password string
var salt string
flag.StringVar(&password, "password", "", "Specify text password.")
flag.StringVar(&salt, "salt", "", "Specify salt.")
flag.Parse()
ciphertext, err := EncodePassword(password, salt)
if err != nil {
fmt.Errorf("password encoding fail: %v", err)
}
fmt.Println(ciphertext)
}
func EncodePassword(password string, salt string) (string, error) {
newPasswd := pbkdf2.Key([]byte(password), []byte(salt), 10000, 50, sha256.New)
return hex.EncodeToString(newPasswd), nil
}
使用上面的脚本进行加密,输出如下内容
$ ./grafana_encode_pwd --help
Usage of ./grafana_encode_pwd:
-password string
Specify text password.
-salt string
Specify salt.
$ ./grafana_encode_pwd --password 123456 --salt g5rwdH6mr7
a43419dd2ca3ea1738d85d2c96678c9e2cc552efb7e0840a80381857975c1e19cf155957b7629771a7cf3ab0647eec110b6c
其中 salt 的值通过查询 grafana.db
中user 表的 salt 字段获取,或者自定义 salt的值,在更新 user 表是,同时更新 password
和 salt
字段,使其一一对应即可。grafana.db
在homepath中 data 目录下。
更新资料库示例:
- 登录资料库
$ sqlite3 grafana.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .header on
- 查找 admin 用户
sqlite> select password, salt from user;
password|salt
e6d3b8c057af271d63ed33ac631d5a30a650d343a039f089db5b0e548d91c60d991646b52d8cf2b48573c53ef551221895a6|g5rwdH6mr7
- 根据脚本生成的密码更新
sqlite> update user set password = 'a43419dd2ca3ea1738d85d2c96678c9e2cc552efb7e0840a80381857975c1e19cf155957b7629771a7cf3ab0647eec110b6c' , salt = 'g5rwdH6mr7' where login = 'admin';
- 更新之后无需重启grafana服务,通过新密码即可登录
参考文档
重置 Grafana admin 密码_Grafana_耳东@Erdong_InfoQ写作社区
Grafana CLI | Grafana documentation
encoding.go