postgresql - 使 Docker PostgreSql 安全 - 不信任本地连接、用户名和密码最大长度
问题描述
语境
因此,目前我正在创建一个设置/启动器脚本,该脚本在客户端机器上使用 PostgreSql 数据库设置一个安全的 docker 容器。
为了使其真正安全,我的计划是让脚本:
- 自动生成随机用户名和密码
- 执行
docker run
(-d postgres
当然)并使用随机生成的用户名和密码 - 自动生成另一组随机用户名和密码
- 使用新生成的用户名和密码创建一个新用户
Grant
新创建的具有适当权限的用户- 返回新创建用户的凭据(用户名和密码),而不是存储(换句话说,忘记)超级用户凭据(用户名和密码)
问题
Postgresql的用户名和密码有什么限制?从这个来源看来,用户名的最大长度是 64 个字节(所以 64 个字符),从这个来源看来,最大密码长度是 100 个字节(所以 100 个字符)。信息是否准确(来源很老,我可能误解了)?另外,只允许使用字母数字字符吗?它是否支持 Base64、MD5 或 SHA?
我注意到我可以在不提供超级用户密码的情况下访问Postgres bash。经过进一步研究,这似乎是由于在创建 Postgres 数据库时,本地访问是受信任的,因为它在
pg_hba.conf
. 不信任所有连接(包括本地连接)的命令是什么,并且任何超级用户操作都需要提供超级用户密码?任何增加安全性的建议,甚至更多,不涉及自托管数据库,而不是让客户在他/她的机器上托管它?(我知道这是一个广泛/离题的问题,因此请随意忽略这个问题)
解决方案
用户名和密码长度:
与所有其他标识符一样,用户名限制为 63 个字节(除非您想重建 PostgreSQL)。
src/include/pg_config_manual.h
有:/* * Maximum length for identifiers (e.g. table names, column names, * function names). Names actually are limited to one less byte than this, * because the length must include a trailing zero byte. * * Changing this requires an initdb. */ #define NAMEDATALEN 64
密码的最大长度取决于密码加密方法和使用的身份验证。对于
scram-sha-256
,限制为 1024。见
src/common/saslprep.c
:/* * Limit on how large password's we will try to process. A password * larger than this will be treated the same as out-of-memory. */ #define MAX_PASSWORD_LENGTH 1024
您引用的 100 限制来自
psql
密码提示,但没有人强迫您使用它。默认身份验证方法
使用
-A
选项 duringinitdb
指定不同的身份验证方法。使 docker 容器安全
是的,这太宽泛了。本质上,如果你有构成数据库的文件,你就可以获得所有数据,所以我认为这是不可能的。
推荐阅读
- vb.net - 单击时搜索按钮不起作用
- c - 有没有办法在#include 中使用 char 数组/变量
- node.js - 在 CPanel(共享主机)上运行 Express Server
- python - Python - 读取多个文件并写入多个新文件
- java - JAVA - 机器人鼠标不移动实际指针
- entity-framework-core - EntityFramewor.Core 不迁移 sqite 数据库
- r - 如何转换 Excel 导入的数据以使用 Plotly 3D 曲面图?
- apache-spark - SQL get date of "when a status change"(考虑到相同的状态可以出现多次)
- r - RCurl 和 Curl 在 R (ubuntu) 上给出不同版本的 Curl
- java - 完成应用程序崩溃时发生Java liibgdx