返回博客

如何在 PostgreSQL 中使用角色和管理权限

如何在 PostgreSQL 中使用角色和管理权限

PostgreSQL 是一款开源的 DBMS,它使用的是 SQL。它是一个非常强大的工具,用于在 VPS 上管理应用程序和托管 Web 数据。在本教程中,您将学习如何在 PostgreSQL 中管理权限。它将帮助您为应用程序角色提供所需的权限。我们将在 Ubuntu 18.04 上的 云服务器 在 CloudSigma 上。

安装 PostgreSQL

要下载并安装 PostgreSQL,请运行以下命令:

安装程序将创建一个默认用户 – “Postgres” 来进行操作。在本教程的大部分内容中,我们将使用该用户。您可以使用以下命令登录该用户:

现在 PostgreSQL 已经安装完毕,您将学习它如何处理权限。您也可以参考我们的 在 Ubuntu 上设置 PostgreSQL 的教程 以获取安装过程的详细分步指南。

PostgreSQL 权限概念

Postgres 通过 “角色” 的概念来管理权限。在角色中,用户和组之间没有区别。角色比传统的 Unix 用户和组系统更具灵活性。例如,一个角色可以作为另一个角色的成员,从而继承其权限。

在 PostgreSQL 中查看角色

要查看 PostgreSQL 中的角色,您需要先使用以下命令登录到提示符:

然后,运行以下命令来查看角色:

show roles manage permissions in PostgreSQL

到目前为止,只有一个拥有所有特权的默认角色。

如何在 PostgreSQL 中创建角色

您可以从命令行或在 Postgres shell 中为 Postgres 创建角色。您可以尝试以下两种方法,之后您将看到如何在 PostgreSQL 中管理权限和访问。

如何在 PostgreSQL 内部创建角色

创建角色最简单的方法是在 Postgres 的提示符中。您可以使用以下命令来执行此操作:

要检查它是否已创建,请运行以下命令:

create role from prompt

它指定新角色没有登录权限。您将在本教程的后面部分学习如何更改该设置。

如何从命令行创建角色

上述方法的替代方法是从命令行创建用户。要退出 PostgreSQL 提示符,请键入以下内容:

您可以使用以下命令创建一个名为 “test” 的角色:

执行上述命令后,登录到 psql,并使用以下命令列出角色:

creating user from commandline

您可以观察到,以这种方式创建的用户不具有相同的属性。

如何在 PostgreSQL 中删除角色

您可以使用以下语法轻松删除 PostgreSQL 中的角色:

您可以使用以下命令删除我们之前创建的演示角色:

drop role

如果我们尝试删除一个不存在的角色,它只会抛出错误。为了看到这一点,您可以尝试再次删除同一个角色:

drop role fail

如果您希望在角色不存在时不让命令抛出错误,可以在命令中添加 ‘IF EXISTS’:

您可以尝试使用此命令重新删除该角色:

drop role if exists

如何在创建角色时定义特权

到目前为止,您已经创建并删除了角色。在本节中,您将创建具有修改后权限的角色。您可以通过在 create 命令中指定角色的权限来执行此操作:

要查看此选项,您可以使用此命令打开帮助:

help create user

如果您想创建一个具有登录权限的角色,可以像这样构建命令:

create role with login manage permissions in PostgreSQL

正如我们之前所看到的,如果您想创建具有登录权限的角色,您还可以使用以下命令:

这两个命令之间的唯一区别是,‘CREATE USER’ 默认会赋予该角色登录权限。

如何在 PostgreSQL 中更改角色的权限

到迄今为止,您已经尝试了如何在创建用户时赋予权限。在本节中,您将修改已创建用户的权限。alter 命令的语法为:

例如,如果需要,您可以使用此命令将 demo_role 的登录权限更改为 ‘登录’:

alter nologin

要允许用户再次登录,您可以使用以下命令修改权限:

如何在 PostgreSQL 中以其他用户身份登录

默认情况下,如果您的用户名与系统用户名匹配,PostgreSQL 仅允许您在本地登录。为了解决这个问题,您可以更改登录类型,或者配置 PostgreSQL 使用环回网络接口。该接口会将连接类型更改为远程,即使连接是本地的也是如此。

在本节中,您将尝试第二种方法。首先,您可以设置用户的密码,以便进行身份验证。

使用以下命令设置 ‘demo_user’ 的密码:

出现提示时,输入并确认密码。完成后,您可以退出 PostgreSQL 界面并返回到普通的机器用户:

PostgreSQL 要求您使用与操作系统用户名匹配的用户名进行登录,并且还要使用相同的用户名连接数据库。由于在这种情况下您没有这样做,因此您必须显式指定要使用的选项。您可以使用以下语法:

user:您要连接的用户名
DB:您有权访问的现有数据库
-h 127.0.0.1:向 PostgreSQL 指定您将通过网络接口连接到本地机器。即使用户名与系统用户名不匹配,此选项也允许我们进行身份验证。
-W:指示 PostgreSQL 您将输入密码

要使用我们的 “test_user” 登录,我们可以发出以下命令:

postgresql login through network interface manage permissions in PostgreSQL

输入密码后,您将登录到 shell。在我们的示例中,我们使用数据库 ‘postgres’,这是在安装过程中自动设置的默认数据库。

在此会话中,根据您选择登录的用户,您将面临没有执行各种操作的正确权限的问题。出现该问题的原因是您尚未给予该用户足够的管理权限。

在下一节中,您将向用户授予所需的权限。首先,您需要将用户切换回管理员用户:

在 PostgreSQL 中管理权限:如何在 PostgreSQL 中授予权限

在 PostgreSQL 中,如果数据库或表是由特定角色创建的,则只有该角色有权对其进行修改。具有超级用户权限的角色除外。在本节中,您将向其他角色授予权限。您可以使用 ‘GRANT’ 语句向其他角色授予权限。语法为:

您可以创建一个简单的表来执行该命令:

要查看创建的表,请运行以下命令:

create table manage permissions in PostgreSQL

现在您有了一个 demo 表,您可以将 ‘demo’ 表的权限授予 ‘demo_role’。您可以使用此命令授予该角色 ‘UPDATE’ 权限:

您可以通过将权限指定为 ‘ALL’ 来向角色授予所有权限:

如果您想向系统上的所有角色授予特定权限,可以使用关键字 ‘public’ 代替角色,如下面的命令所示:

您可以使用以下命令查看已授予的所有权限:

granted permissions

在 PostgreSQL 中管理权限:如何在 PostgreSQL 中移除权限

您可以使用 ‘REVOKE’ 命令轻松移除角色的权限。它与 grant 命令非常相似:

与 GRANT 类似,我们可以使用关键字 – ‘ALL’ 和 ‘PUBLIC’ 来授予所有权限或向所有角色授予权限:

如何在 PostgreSQL 中使用组角色

为了实现广泛的权限控制,角色足够灵活,允许与其他角色进行分组。例如,您可以创建一个角色 – ‘temporary_role’,然后将 ‘demo_role’ 和 ‘test_user’ 添加到该角色中:

现在,您只需通过管理 ‘temporary_role’ 角色的权限,即可管理这两个角色的权限。这使得权限管理更加简单。您可以使用此命令查看角色成员身份信息:

role - group manage permissions in PostgreSQL

任何组群成员都可以通过使用 ‘set role’ 命令来扮演该组。由于 ‘postgres’ 用户是超级用户,即使您不是该组的成员,也可以使用 ‘set role’:

您现在创建的任何表都将归 temporary_role 所有:

要检查表的所属关系,请运行以下命令:

create table with temporary_role

您可以看到 ‘temporary_role’ 角色拥有新表以及与 serial 数据类型关联的序列。要恢复到原始角色权限,请运行以下命令:

如果您希望角色拥有其所属角色的所有权限,可以使用 ‘alter role’ 命令指定 ‘inherit’ 属性:

通过上述命令,‘test_user’ 已获得了它所属角色的所有权限。要删除角色,可以使用 ‘drop role’ 命令:

drop role manage permissions in PostgreSQL

上述命令会抛出错误,因为我们有一些对象(例如表 ‘hello’)依赖于它。要删除它,您可以将表的所属权转移给其他角色:

您可以使用以下命令检查 temporary_role 现在是否不拥有任何表:

check ownerships

您现在可以删除 ‘temporary_role’ 了,因为它现在没有任何依赖关系:

尽管上述命令会删除 temporary_users 角色,但该角色组的前成员并不会被移除。

结论

您已完成本教程,现在您已了解如何在 PostgreSQL 中管理权限。您可以轻松地管理这些权限。了解如何管理权限可以确保您的应用程序能够访问所需的数据库,同时无法访问其他应用程序使用的任何其他数据库。

祝您计算愉快!

author

Akshay Nagpal

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。