上下文
所以目前我正在创建一个设置/启动器脚本,该脚本在客户端计算机上使用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
密码提示,但没有人强迫您使用它。 -
默认身份验证方法
在
initdb
期间使用-A
选项指定不同的身份验证方法。 -
使 docker 容器安全
是的,这太宽泛了。从本质上讲,如果你有构成数据库的文件,你可以得到所有的数据,所以我认为这是不可能的。