【问题标题】:Why CREATE USER updates PG_ROLES table?为什么 CREATE USER 更新 PG_ROLES 表?
【发布时间】:2020-05-07 01:19:36
【问题描述】:

当我使用 "CREATE USER user1 WITH PASSWORD 'aaaaaaaa' 创建用户时 它还在 PG_ROLES 表中创建一个角色名称与“user1”相同的角色

这是执行此操作的触发器吗?还是默认行为?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    假设您运行的不是很旧 (CREATE USER 的文档对此进行了解释:

    CREATE USER 现在是 CREATE ROLE 的别名。唯一的区别是 当命令拼写为 CREATE USER 时,LOGIN 假定为 默认,而当命令拼写为 CREATE 时假定为 NOLOGIN 角色。

    文档的Database Roles 部分提供了更多详细信息:

    角色的概念包含“用户”和“组”的概念。在 PostgreSQL 8.1 之前的版本,用户和组是不同的种类 实体,但现在只有角色。任何角色都可以充当用户, 一组,或两者兼而有之。

    system catalogs 文档解释说:

    pg_roles 视图提供对数据库角色信息的访问。

    因此基于此,预计运行CREATE USER 将对pg_roles 产生影响。

    【讨论】:

    • 好的,谢谢。为什么他们要制造真正让用户感到困惑的系统。保持用户和角色的不同和关联是好的,甚至在 AWS 上也普遍使用。如果他们想利用旧代码,他们也可以实现用户友好。没什么大不了的,谢谢。
    • 这可能会令人困惑,但有据可查。对 this question 的回复中讨论了更改的理由。
    • 我可以安全地假设,如果我创建 100 个用户,除了在 PG_USER 表上创建 100 个新条目之外,它还在 PG_ROLES 表上添加了 100 个新角色(当然我需要 GRANT 正确的角色来创建用户之后)。我说的对吗?
    • 根据我的回答“只有角色”;与用户相关的命令是为了兼容性,但是当您运行“CREATE USER”时,这实际上添加了一个角色。角色信息存储在系统目录(保存配置信息的表)pg_authidpg_db_role_setting 中。 PG_USERPG_ROLES 都是从这些目录访问数据的视图(不是表)(PG_USER 间接执行此操作)。因此,添加 100 个用户将“添加”100 个角色(添加具有登录权限的角色将“添加”一个用户)。
    • 感谢英国人,感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多