首页 > 数据库 >如何在ProxySQL中保持散列格式的密码

如何在ProxySQL中保持散列格式的密码

时间:2023-04-28 13:45:42浏览次数:37  
标签:username +----------+-------------------------------------------+ ProxySQL 密码 my

在这篇博客文章中,我们将看到如何在ProxySQL mysql_users 中保存哈希格式的密码。此外,即使有人以明文形式存储密码,我们也可以很容易地将其转换成散列格式。

纯文本密码极易受到未经授权的访问,因为任何有权访问数据库或配置文件的人都可以轻易地读取它们。虽然将这些文件存储在安全的位置可以缓解一些安全问题,但仍然存在数据泄露的风险。另一方面,散列密码与MySQL服务器中的密码以相同的格式存储" mysql.user.password "(MySQL 8.0版本之前)或者mysql.user.authentication_string"列(自MySQL 8.0版本使用mysql_native_password插件),提供了额外的安全层。

在ProxySQL中,任何以星号(*)开头的密码都被视为散列密码。

ProxySQL的管理界面缺少密码()功能。因此,存储在ProxySQL中的任何密码都以最初插入时的格式保存。这种格式可以是纯文本,也可以是哈希值。

From ProxySQL: 

在这里,我们将用户账户插入到 mysql_users 混合明文格式和哈希格式的表。

ProxySQL_Admin> INSERT INTO mysql_users(username,password) VALUES ('test1','test1'), ('test2','*7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E'),('test3','test3'), ('test4','*D159BBDA31273BE3F4F00715B4A439925C6A0F2D');
Query OK, 4 rows affected (0.00 sec)
 
 
ProxySQL_Admin> select distinct username,password from mysql_users where username like 'test%';
+----------+-------------------------------------------+
| username | password                                  |
+----------+-------------------------------------------+
| test1    | test1                                     |
| test2    | *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E |
| test3    | test3                                     |
| test4    | *D159BBDA31273BE3F4F00715B4A439925C6A0F2D |
+----------+-------------------------------------------+
4 rows in set (0.00 sec)
 
 
ProxySQL_Admin> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
 
 
ProxySQL_Admin> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.01 sec)
 
 
ProxySQL_Admin> select distinct username,password from mysql_users where username like 'test%';
+----------+-------------------------------------------+
| username | password                                  |
+----------+-------------------------------------------+
| test1    | test1                                     |
| test2    | *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E |
| test3    | test3                                     |
| test4    | *D159BBDA31273BE3F4F00715B4A439925C6A0F2D |
+----------+-------------------------------------------+
4 rows in set (0.00 sec)

在这里上面,主要问题是我们的mysql_users表格中有一些对某些用户帐户可见的纯文本密码(test1 & test3),我们不想以明文/纯文本密码格式保存它。相反,所有密码条目都应该以哈希密码格式提供。

一种方法可以解决这个问题:删除用户账户的明文密码条目,使用PASSWORD() 函数,然后将这些实际的散列条目插入mysql_users表来修复该问题。

另外一种  admin-hash_passwords 变量将帮助我们解决这个问题,并且只在ProxySQL中以散列密码条目保存在mysql_users

ProxySQL’s admin-hash_passwords variable

ProxySQL版本1.2.3包含了一个新的全局布尔变量,名为 admin-hash_password,默认情况下启用它以支持哈希密码。如果admin-hash_passwords=true,当执行" LOAD MYSQL USERS TO RUNTIME" 时,RUNTIME态 密码将自动 hashed。但是,存储在mysql_users 表不会被自动散列。运行"SAVE MYSQL USERS FROM RUNTIME "将MYSQL用户密码以hash永久保存到磁盘

 

让我们将散列密码保存在ProxySQL中

ProxySQL_Admin> select @@admin-hash_passwords;
+------------------------+
| @@admin-hash_passwords |
+------------------------+
| true                   |
+------------------------+
1 row in set (0.00 sec)
 
 
ProxySQL_Admin> select distinct username,password from mysql_users where username like 'test%';
+----------+-------------------------------------------+
| username | password                                  |
+----------+-------------------------------------------+
| test1    | test1                                     |
| test2    | *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E |
| test3    | test3                                     |
| test4    | *D159BBDA31273BE3F4F00715B4A439925C6A0F2D |
+----------+-------------------------------------------+
4 rows in set (0.00 sec)
 
 
ProxySQL_Admin> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
 
 
ProxySQL_Admin> select distinct username,password from mysql_users where username like 'test%';
+----------+-------------------------------------------+
| username | password                                  |
+----------+-------------------------------------------+
| test1    | test1                                     |
| test2    | *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E |
| test3    | test3                                     |
| test4    | *D159BBDA31273BE3F4F00715B4A439925C6A0F2D |
+----------+-------------------------------------------+
4 rows in set (0.00 sec)

目前,密码在 RUNTIME 进行哈希处理,但它们在mysql_users中not hashed 。为了在mysql_users表中hash,我们需要运行"SAVE MYSQL USERS FROM RUNTIME"命令。运行命令"SAVE MYSQL USERS TO DISK"在磁盘上以哈希密码永久存储。

ProxySQL_Admin> SAVE MYSQL USERS FROM RUNTIME;
Query OK, 0 rows affected (0.00 sec)

ProxySQL_Admin> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.01 sec)
 
ProxySQL_Admin> select distinct username,password from mysql_users where username like 'test%';
+----------+-------------------------------------------+
| username | password                                  |
+----------+-------------------------------------------+
| test1    | *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
| test2    | *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E |
| test3    | *F357E78CABAD76FD3F1018EF85D78499B6ACC431 |
| test4    | *D159BBDA31273BE3F4F00715B4A439925C6A0F2D |
+----------+-------------------------------------------+
4 rows in set (0.00 sec)

结论

mysql_users 有混合格式的密码条目时 ,admin-hash_passwords 功能会非常有用,我们可以很容易地简化散列密码条目的管理。此外,为了确保只有散列密码条目存储在ProxySQL中,必须使用 mysql_native_password  插件。

参考:https://www.percona.com/blog/how-to-persist-a-hashed-format-password-inside-proxysql/

标签:username,+----------+-------------------------------------------+,ProxySQL,密码,my
From: https://www.cnblogs.com/andy6/p/17361863.html

相关文章

  • ORA-01810 格式代码出现两次,日期格式,时间格式,to_date错误
    这个错误的原因是使用了两次MMto_date('YYYY-MM-DDHH:MM:SS')需要把分钟的MM改成MIto_date('YYYY-MM-DDHH:MI:SS')这样可能会出现小时变成了上下午的12小时格式,所以可以给小时设置成24小时格式to_date('YYYY-MM-DDHH24:MI:SS')黑色头发:http://heise......
  • 请问Pandas怎么能把类似201001这种月度格式改为2021-01-31这种日期格式
    今日鸡汤落叶人何在,寒云路几层。大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【老松鼠】问了一道Pandas时间处理的问题,如下图所示。二、实现过程一开始以为只是每个数据先加个31后缀,之后日期格式化转换一下应该就可以了,后来发现每个月天数不一样,不可以一概而论,......
  • "Wed Aug 03 19:48:03 +0800 2022"这种字符串,怎么转成时间格式年月日
    今日鸡汤清瑟怨遥夜,绕弦风雨哀。大家好,我是Python进阶者。一、前言昨天在Python黄金交流群【此类生物】问了一个Python时间处理的问题二、实现过程这里一共有两个方法,实现的过程是类似的。这里【瑜亮老师】给了一个回答,代码如下所示:fromdatetimeimportdatetimed='WedAug03......
  • java 格式化输出当前时间
    /***打印当前时间**@return*/publicstaticvoidprintCurrentTime(Stringparam){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");//关键所在TimeZonegmt=TimeZone.getTimeZone("GMT+8");sdf.setTimeZone(gmt);......
  • @JsonFormat和@DataFormat注解解决前后端日期格式一致性问题
    场景分析场景1:当我们从数据库中查询某篇博客文章数据时,blog表中文章发布日期blog_date这个字段,如果未经过处理,后端查询到的数据传到前端进行展示时,会得到一个不太符合我们要求的日期格式,比如:"blog_date":"2020-12-01T14:25:31.296+0000",为了解决这个问题,将后端返回给前端的日......
  • #PowerBI 利用format函数,自定义格式显示
    PowerBI是一款强大的数据分析和可视化工具,它可以帮助我们快速地创建各种报表和仪表盘,展示数据的洞察和价值。在PowerBI中,有许多内置的函数可以帮助我们处理和转换数据,其中一个常用的函数就是Format函数。Format函数的作用是将一个值按照指定的格式进行显示,例如日期、时间、货币......
  • 字符串的格式转换,GBK.UTF8.WCHAR.CHAR
    这里介绍的是使用Windowsapi进行的转换,看一下源代码:template<typenameAy,typenameTy>CStringT<Ay,StrTraitMFC_DLL<Ay>>StrTran(constTy*val,intopt=CP_ACP)constnoexcept{static_assert((std::is_same_v<Ay,char>&&std:......
  • c++输出格式控制
    c++输出格式控制 一.控制符需要<iomanip>头文件常用:1.保留几位有效数字:setpricision(),括号里是保留的位数2.保留几位小数:setiosflags(ios::fixed)<<setpricision(),括号里是保留的位数(注意前面半句会影响此后所有setpricision()的用法,都变成保留小数位数,不只是这......
  • IntelliJ Idea设置text file encoding UTF-8;换行符为 Unix 格式
    设置textfileencodingUTF-8Transparentnative-to-asciiconversion这个功能会将我们输入的所有字符转换成Unicode序列码保存,避免properties的乱码问题。CreateUTF-8files选择withNOBOMUTF-8BOM又叫UTF-8签名。BOM,byteordermark。UTF-8的BOM在文件头部,用来标识......
  • 时间格式化,显示昨天、今天
    时间格式化的需求:今天的数据显示“时分”,HH:mm10:00昨天的数据显示“昨天时分”,昨天10:00今年的数据,显示“月日时分”,05-0110:00不是今年的数据,显示“年月日时分”,2022-05-0110:00代码展示在ios中用newDate("2022-05-0110:00").getTime()会有兼容性问题,......