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 表是,同时更新 passwordsalt 字段,使其一一对应即可。grafana.db 在homepath中 data 目录下。

更新资料库示例:

  1. 登录资料库
$ 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
  1. 查找 admin 用户
sqlite> select password, salt from user;
password|salt
e6d3b8c057af271d63ed33ac631d5a30a650d343a039f089db5b0e548d91c60d991646b52d8cf2b48573c53ef551221895a6|g5rwdH6mr7
  1. 根据脚本生成的密码更新
sqlite> update user set password = 'a43419dd2ca3ea1738d85d2c96678c9e2cc552efb7e0840a80381857975c1e19cf155957b7629771a7cf3ab0647eec110b6c' , salt = 'g5rwdH6mr7' where login = 'admin';
  1. 更新之后无需重启grafana服务,通过新密码即可登录

参考文档

重置 Grafana admin 密码_Grafana_耳东@Erdong_InfoQ写作社区
Grafana CLI | Grafana documentation
encoding.go

posted @ 2024-03-28 16:42  星痕·  阅读(55)  评论(0编辑  收藏  举报