postgresql - 如何安全存储各种凭证?

标签 postgresql security passwords credentials

背景:我正在开发一个应用程序(用于一个学校项目),该应用程序本质上将成为网络 Assets 管理和修复工具。它将扫描网络中的设备,收集有关它们的信息并做一些与问题无关的其他事情。它的一项功能是允许用户为各种网络设备提供登录凭据,这样应用程序就可以登录到这些设备,从而收集更多信息,然后允许进行更改。

我的问题:我如何才能安全地存储那些提供的凭据。目前,后端将由一个 PostgreSQL 数据库(其中将包含扫描数据)组成,但我不确定将它们存储在那里是否安全,或者我应该如何解决安全存储它们的问题,以便它们可能以后用到。

附注:如果您需要任何其他信息,请告诉我,我是使用堆栈溢出的新手,所以我不确定我是否提供了足够的详细信息。谢谢。

最佳答案

https://www.postgresql.org/docs/current/static/pgcrypto.html 文档非常具体,包含示例。每个数据库创建一次扩展:

t=# create extension pgcrypto;
CREATE EXTENSION

假设密码是 Ирландия,然后使用随机盐:

t=# select crypt('Ирландия', gen_salt('md5'));
               crypt
------------------------------------
 $1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1
(1 row)

或:

t=# select crypt('Ирландия', gen_salt('md5'));
               crypt
------------------------------------
 $1$wjJDa4Np$M7XqQIrgnfpAf.CLtrpkv1
(1 row)

每次都有不同的结果,因此请使用其中任何一个来检查密码是否正确,例如:

t=# select crypt('Ирландия', '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1') = '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1' as match;
 match
-------
 t
(1 row)

错误的是:

t=# select crypt('ИрландияNOT', '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1') = '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1' as match;
 match
-------
 f
(1 row)

上述函数的参数在F.26.2 部分。密码哈希函数

关于postgresql - 如何安全存储各种凭证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49416257/

相关文章:

java - Struts 2 对输入参数进行编码以避免 XSS

c++ - C++ 中的密码 |打印后删除字符

c - C/C++ 中检查密码强度的算法

c++ - Flash 可以检测正在拍摄的屏幕截图(或 GDI bitcopy)吗?

c# - 使用密码中的随机数字进行身份验证

postgresql - SQLAlchemy 和 PostgreSQL : to_tsquery()

mysql - Entity Framework ,创建适用于 2 种数据库类型(Firebird 和 Mysql)的应用程序

python - 无法安装 psycopg2 Ubuntu

database - 使用触发器更新基于另一个表插入的表行?

security - 文件/文件夹的 Google Drive SDK 权限