为什么我不能创建这个角色并赋予另一个角色权限

为什么我不能创建这个角色并赋予另一个角色权限

这不管用

CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN WITH "role-one";

我收到这个错误

ERROR:  unrecognized role option "role-one"
LINE 1: CREATE ROLE "other_role" WITH "role-one";

我做错了什么?我在网上找不到能让我明白语法的例子。从我所见,这应该可行。

如何使用 LOGIN 创建新角色并将其添加到名为 role-one 的另一个角色?

答案1

因为你使用了错误的语法。让我引用一下手动的

CREATE ROLE name [ [ WITH ] option [ ... ] ]

where option can be:
...
   | IN ROLE role_name [, ...]
   | ROLE role_name [, ...]
...

IN ROLE 角色名称

IN ROLE 子句列出了一个或多个现有角色,新角色将立即作为新成员添加到这些角色中。(请注意,没有将新角色添加为管理员的选项;请使用单独的 GRANT 命令来执行此操作。)

ROLE 角色名称

ROLE 子句列出一个或多个现有角色,这些角色会自动添加为新角色的成员。(这实际上使新角色成为一个“组”。)...

(我跳过了不感兴趣的部分)。

因此,正确的语法应该是:

  • 如果你想other_role成为会员role-one
CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN IN ROLE "role-one";
  • 如果你想role-one成为会员other_role(反之):
CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN ROLE "role-one";

注意关键词ROLE以及IN ROLE你显然跳过了哪些。

还有一种方法可以在两个不同的命令中创建角色并授予成员资格,这在另一个命令中通过详细示例完美地解释了这一点手册页

CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN;
GRANT "role-one" TO "other_role";

在这种情况下,other_role将成为的成员role-one。要执行相反的操作,请在最后的 GRANT 中交换它们。

另外,不相关的建议:

  • 不要将角色命名为“other_role”和“role-one”。第一个角色应该是“other-role”,第二个角色应该是“role_one”,因此两个角色都包含破折号或下划线。保持一致。这确实有助于让事情变得简单直接;
  • 如果你要将角色设为“组”,请考虑添加它没有LOGIN 选项。让它严格地成为一个组。

相关内容