首页 > 数据库 >POSTGRESQL中从MD5到SCRAM-SHA-256

POSTGRESQL中从MD5到SCRAM-SHA-256

时间:2023-09-01 23:22:15浏览次数:64  
标签:POSTGRESQL 密码 scram 身份验证 SHA sha SCRAM 256 MD5

从 v10 开始,PostgreSQL 提供了scram-sha-256对密码哈希和身份验证的支持。本文介绍了如何安全地调整您的应用程序。

为什么我们需要scram-sha-256

PostgreSQL 使用哈希加密有两个目的:

  • 实际的数据库密码是用户输入的明文密码的哈希值。这可以防止小偷在其他系统上使用偷来的密码。
  • 在密码验证过程中,客户端必须使用服务器提供的随机盐对密码进行散列。如果服务器从客户端收到正确的散列响应,则密码检查成功。

现在,MD5 散列方法存在弱点,不适合加密。特别是,使用给定的 MD5 哈希值构造字符串太容易了。这些缺点不适用于 PostgreSQL 使用 MD5 的方式,但使用更好的哈希算法仍然有意义:

  • 昂贵的散列函数使得暴力破解密码变得更加困难
  • 在安全审计期间,如果PostgreSQL不使用有缺陷的散列函数,看起来会更好

因此在 v10 中引入了scram-sha-256支持。如果可以的话,开始使用新的哈希方法。暴力破解密码的难度增加了,因此值得付出努力。

切换到的问题scram-sha-256

有两个问题导致很难从 MD5 切换到scram-sha-256

  • 由于PostgreSQL不知道原来的明文密码,将密码加密方法改为 scram-sha-256 后,用户必须重新设置密码。
  • PostgreSQL客户端必须支持 scram-sha-256 身份验证,因此使用旧的客户端软件进行身份验证将会失败。

当你尝试连接到一个需要scram-sha-256身份验证的服务器时,使用旧版本的libpq会得到的错误信息是:

authentication method 10 not supported

旧的 JDBC 驱动程序会告诉您:

The authentication type 10 is not supported.

旧版本的 Npgsql 将返回:

Authentication method not supported (Received: 10)

切换到scram-sha-256的步骤说明

实际上,转换为scram-sha-256并不难,只要你遵循以下原则:

1.升级客户端软件

升级所有过时的PostgreSQL客户端软件和驱动程序,以支持新的身份验证方法。无论如何,这是一个好主意,因为陷入旧的、未维护的软件永远不是明智的。

2. 更改password_encryption参数

编辑postgresql.conf并将参数更改为

password_encryption = scram-sha-256

确保删除了该行开头的散列值(#)。然后通过运行重新加载服务器

pg_ctl reload -D /postgres/datadir

其中/postgres/datadir是 PostgreSQL 数据目录。或者,您可以运行以下 SQL 语句:

SELECT pg_reload_conf();

查看日志文件以查看重新加载是否成功,并通过 SQL 检查新值:

SHOW password_encryption;

注意,即使修改了参数,旧的MD5密码仍然有效,只要pg_hba.conf中的身份验证方法设置为MD5即可。

3. 重新设置所有密码

所有经过密码验证的用户必须更改密码。在psql中,超级用户可以用

\password user_name

即使用户设置与以前相同的密码,该密码现在也将使用 SHA-256 进行哈希处理。在继续下一步之前,请检查该表pg_authid并确保它不再包含 MD5 哈希密码。

4. 更改认证方式pg_hba.conf

这一步不是严格必须的,因为PostgreSQL将对sram -sha-256哈希密码使用sram -sha-256身份验证,即使在pg_hba .conf中将身份验证方法设置为md5。这是一个兼容性特性。

不过,您应该修改pg_hba.conf,将所有出现的md5替换为scham -sha-256。这将阻止仍然使用旧MD5密码的用户进行身份验证。

之后,像上面一样重新加载配置。然后检查日志文件或检查视图pg_hba_file_rules,以查看重新加载是否成功。

结论

从上面可以看出,将 md5 改为 scram-sha-256并不难。困难的部分是你必须重新设置所有的密码,并且你可能需要升级客户端软件。

标签:POSTGRESQL,密码,scram,身份验证,SHA,sha,SCRAM,256,MD5
From: https://www.cnblogs.com/jl1771/p/17673054.html

相关文章

  • postgresql常用命令
    PostgreSQL是一个强大的开源关系型数据库管理系统,它提供了许多用于管理数据库和执行操作的命令。以下是一些常用的PostgreSQL命令:连接到数据库:psql-hhostname-ddbname-Uusername这个命令用于连接到指定的数据库,需要提供主机名、数据库名和用户名。你可以根据需要修......
  • 用SharedPreferences写的存储工具类
    读写更方便publicclassPersistenceUtil{ privateContextcontext; publicContextgetContext(){ returncontext; } publicvoidsetContext(Contextcontext){ this.context=context; } publicPersistenceUtil(Contextcontext){ this.context=contex......
  • OGG_Linux_x64_BigData启动ggsci时报错:error while loading shared libraries: libjvm
    问题描述:[root@hadoop03ggs]$./ggsci./ggsci:errorwhileloadingsharedlibraries:libjvm.so:cannotopensharedobjectfile:Nosuchfileordirectory 解决办法:1.查看缺少那些.so文件[root@hadoop03/]# lddggsci 2.查libjvm.so库文件的路径[root@hadoop0......
  • Linux安装PostgreSql
    1、准备工作Linux、Centos7、PostgreSql142、安装a>进入PostgreSql下载官网(PostgreSql),选装指定的版本编辑b>依次执行网页中的命令编辑3、设置允许远程连接a>进入data目录[root@localhost~]#cd/var/lib/pgsql/14/datab>修改postgresql.conf文件[root@localhostdata]#vimpo......
  • [React Typescript] Strongly type Shared props for multiple components (React.FC<
    import{Equal,Expect}from"../helpers/type-utils";typeInputProps=React.ComponentProps<"input">;constCOMPONENTS={text:(props)=>{return<input{...props}type="text"/>;},number:(p......
  • webpack生产环境优化:tree shaking
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:treeshakingtreeshaking:去除无用代码前提:1.必须使用ES6模块化2.开启production环境1一、核心配置```js/*webpack.config.jswebpack的配置文件......
  • PostgreSQL-可以通过localhost连接,无法通过IP地址连接。
    (1)如果PostgreSQL配置文件中没有允许访问该服务器的IP地址,则需要先添加允许访问的IP地址,并在防火墙中开放相应的端口。(2)在PostgreSQL配置文件postgresql.conf中,找到以下行:listen_addresses='localhost'将localhost改为*,表示允许任何IP地址访问该服务器。如果只允许特定的IP地址......
  • Postgresql-数据库无法停止,报错:pg_ctl server does not shut down
    根据您的查询,pg_ctlserverdoesnotshutdown(pg_ctl服务无法关闭)的原因可能有很多。以下是一些可能的解决方案和代码示例:(1)杀死所有与PostgreSQL相关的进程:使用以下命令尝试停止所有与PostgreSQL相关的进程:pg_ctl-D/path/to/postgresql/data_directorystop-mimmediate这......
  • PostgreSQL 查找当前数据库的所有表、字段
     查所有表SELECT tablenameFROM pg_tablesWHERE tablenameNOTLIKE'pg%' ANDtablenameNOTLIKE'sql_%'ORDERBY tablename;查看当前表的所有字段SELECT C.relname, A.attnameASNAME, A.attnotnullASNOTNULL, format_type(A.atttyp......
  • shasum
    Terminal$sha256sum-tEnterthetextandpressctrl+dwhenyouarefinished.Algorithm$shasum-a256file.txtChecksha256sum-cfile.txtInAction$echo"What>">file1.txt$echo"Where">file2.txt$echo"wh......