AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1132728
Accepted
red888
red888
Asked: 2023-06-07 00:35:16 +0800 CST2023-06-07 00:35:16 +0800 CST 2023-06-07 00:35:16 +0800 CST

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

  • 772

这行不通

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 的角色?

postgresql
  • 1 1 个回答
  • 12 Views

1 个回答

  • Voted
  1. Best Answer
    Nikita Kipriyanov
    2023-06-07T01:30:07+08:002023-06-07T01:30:07+08:00

    因为你使用了错误的语法。让我引用手册:

    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 选项的情况下添加它。让它成为一个严格的群体。
    • 0

相关问题

  • OS X 上的 Postgresql 安装问题

  • 修复 mysql 命令行程序中的 Control-C?

  • 有哪些好的 PostgreSQL 管理工具?[关闭]

  • Access 通过 ODBC 连接到远程 Postgresql 数据库是否可用?

  • 哪个数据库服务器扩展性更好:PostgreSQL 还是 MySQL?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve