使 Docker PostgreSql 安全 - 不信任本地连接,用户名和密码最大长度



上下文

所以目前我正在创建一个设置/启动器脚本,该脚本在客户端计算机上使用PostgreSQL数据库设置一个安全的docker容器。

为了使它真正安全,我的计划是让脚本:

  1. 自动生成随机用户名和密码
  2. 执行docker run(当然使用-d postgres(以及随机生成的用户名和密码
  3. 自动生成另一组随机用户名和密码
  4. 使用新生成的用户名和密码创建新用户
  5. 为新创建的用户Grant适当的权限
  6. 返回新创建的用户的凭据(用户名和密码(,并且不存储(换句话说,忘记(超级用户凭据(用户名和密码(

问题

  1. Postgresql 的用户名和密码有哪些限制?从此来源来看,用户名最大长度似乎为 64 字节(因此为 64 个字符(,并且从此来源来看,最大密码长度似乎为 100 字节(因此为 100 个字符(。信息是否准确(来源很旧,我可能误解了(?另外,只允许使用字母数字字符吗?它是否支持 Base64、MD5 或 SHA?

  2. 我注意到我可以在不提供超级用户密码的情况下访问 Postgres bash。经过进一步的研究,这似乎是由于在创建Postgres数据库时,本地访问被信任,因为它在pg_hba.conf中自动配置。取消信任所有连接(包括本地连接(的命令是什么,任何超级用户操作都需要提供超级用户密码?

  3. 任何提高安全性的建议,甚至更多,不涉及自托管数据库而不是让客户端在他/她的机器上托管它?(我知道这是一个广泛/偏离主题的问题,因此请随意忽略此问题(

  1. 用户名和密码长度:

    用户名限制为 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密码提示,但没有人强迫您使用它。

  2. 默认身份验证方法

    initdb期间使用-A选项指定不同的身份验证方法。

  3. 使 docker 容器安全

    是的,这太宽泛了。从本质上讲,如果你有构成数据库的文件,你可以得到所有的数据,所以我认为这是不可能的。

相关内容

  • 没有找到相关文章

最新更新