在PostgreSQL中,所有内容都是围绕role概念构建的。
在macOS上首次安装PostgreSQL时,该脚本使用您的macOS用户名创建了一个角色 ,并授予了权限列表。
PostgreSQL中没有用户,只有role 。
通过在终端中运行psql postgres ,您将使用您的macOS用户名自动登录到PostgreSQL,从而访问创建的角色。
就我而言,创建了flaviocopes角色,可以使用\du命令看到它:

看到? 默认情况下,我具有以下角色属性 :
-
Superuser -
Create role -
Create DB -
Replication -
Bypass RLS
而且我不是任何其他角色的成员(稍后再讨论)
创建一个新角色 (Creating a new role)
使用CREATE ROLE命令创建一个新角色:
CREATE ROLE <role>;
例如:
CREATE ROLE testing;

我们有了一个Cannot login角色属性的新角色。 我们新创建的用户将无法登录。
您可以先输入\q命令,然后再输入psql postgres -U testing尝试,但是您会看到此错误:

要解决此问题,我们必须在创建时添加LOGIN角色属性:
CREATE ROLE <role> WITH LOGIN;
如果我们使用以下方法删除该角色:
DROP ROLE <role>;
并这次添加WITH LOGIN :
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
我们可以看到testing角色可以登录,因为这次我们没有Cannot login role属性:

尝试添加命令\q退出,然后添加psql postgres -U testing :

请注意, 提示已从=#更改为=>因为我们现在没有Superuser角色属性。
为角色添加密码 (Adding a password to a role)
在上一个CREATE ROLE命令中,我们创建了一个没有密码的角色。 当然,拥有(安全)密码非常重要。 您可以使用PASSWORD关键字添加密码:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
创建用户 (CREATE USER)
使用自动添加的LOGIN属性来定义角色的另一种方法(有效地创建可以登录的用户)是使用CREATE USER :
CREATE USER <role> PASSWORD '<password>';
向角色添加角色属性 (Adding a role attribute to a role)
稍后可以使用ALTER ROLE命令将角色属性添加到角色。
假设我们创建了一个没有LOGIN属性的角色:
CREATE ROLE <username> PASSWORD '<password>';
我们可以使用以下方法添加它:
ALTER ROLE <role> WITH LOGIN;
内置角色属性 (Built-in role attributes)
我们已经看到LOGIN角色属性,以允许角色登录。
但是,我们还可以使用其他哪些内置角色属性?
-
LOGIN/NOLOGIN:允许(或不允许)登录到PostgreSQL -
SUPERUSER/NOSUPERUSER:允许(或不允许)超级用户权限。 数据库超级用户将绕过除LOGIN(必须单独授予)以外的其他权限检查。 -
CREATEDB/NOCREATEDB:允许(或不允许)创建新数据库的能力 -
CREATEROLE/NOCREATEROLE:允许(或不允许)创建新角色 -
CREATEUSER/NOCREATEUSER:允许(或不允许)创建新用户 -
INHERIT/NOINHERIT:允许(或不允许)使特权可继承 -
REPLICATION/NOREPLICATION:授予(或不授予)复制权限(我们将不介绍的高级主题)
组角色 (Group roles)
在PostgreSQL中,没有用户组。
相反,您可以创建具有特定权限的角色,然后将这些角色授予其他角色。
如果角色具有INHERIT属性,则角色将继承授予他们的角色的权限。
建立群组角色 (Create a group role)
要创建组角色,请键入
CREATE ROLE <groupname>;
语法与创建角色相同。
创建组角色后,您可以使用GRANT将角色添加到组角色中:
GRANT <groupname> TO <role>
例如,我们可以创建一个flavio用户角色,一个“雇员”组角色,并将该用户分配给该组角色:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
您可以使用以下方法从组角色中删除角色:
REVOKE <groupname> FROM <username>
例:
REVOKE employee FROM flavio;
组角色属性 (Group role attributes)
默认情况下,将角色添加到组角色不会使该角色继承组角色的属性(权限)。
您需要使用INHERIT属性创建组角色。
假设您创建了雇员组角色,并为其分配了CREATEDB属性:
CREATE ROLE employee WITH CREATEDB INHERIT;
现在使用INHERIT创建一个新角色:
CREATE ROLE flavio;
GRANT employee TO flavio;


本文详细介绍了PostgreSQL中的角色概念,强调了其与用户的关系。在macOS上安装时,PostgreSQL会根据macOS用户名创建角色。通过`CREATEROLE`命令,可以创建新角色,并使用`ALTERROLE`添加或修改角色属性,如`LOGIN`、`SUPERUSER`等。创建用户等效于创建带有`LOGIN`属性的角色。密码可以通过`PASSWORD`关键字添加,而权限可以通过`GRANT`和`REVOKE`操作进行管理。此外,还介绍了如何创建组角色以及如何利用`INHERIT`属性传递权限。
1745

被折叠的 条评论
为什么被折叠?



