PostgreSQL 授权

简介:在本教程中,您将学习如何使用 PostgreSQL GRANT 语句向角色授予对数据库对象的权限。

PostgreSQL GRANT 语句介绍

之后创建角色与 LOGIN 属性,角色可以登录到PostgreSQL数据库服务器。但是,它不能对表、视图、函数等数据库对象做任何事情。

例如,用户角色不能从表中选择数据或执行特定功能。

要允许用户角色与数据库对象交互,您需要使用该 GRANT 语句将数据库对象的权限授予用户角色。

下面显示了将表的 GRANT 一个或多个权限授予角色的语句的简单形式:

GRANT privilege_list | ALL 
ON  table_name
TO  role_name;

在这个语法中:

  • 首先,指定 privilege_list ,可以是 SELECT , INSERT , UPDATE , DELETE , TRUNCATE ,等。您可以使用该 ALL 选项将表的所有权限授予角色。
  • 其次,在关键字后指定表名 ON 。
  • 第三,指定要授予权限的角色的名称。

PostgreSQL GRANT 语句示例

首先,使用 postgres 用户选择的任何客户端工具连接到 PostgreSQL 数据库服务器。

其次,创建一个名为 joe 可以登录PostgreSQL数据库服务器的新用户角色:

create role joe 
login 
password 'Abcd1234';

第三,创建一个名为的新表 candidates :

create table candidates (
    candidate_id int generated always as identity,
    first_name varchar(100) not null,
    last_name varchar(100) not null,
    email varchar(255) not null unique,
    phone varchar(25) not null,
    primary key(candidate_id)
);

四、使用角色 joe 在单独的会话中登录PostgreSQL数据库服务器。

第五,尝试 candidates 从 joe 的会话中选择表中的数据:

SELECT * FROM candidates;

PostgreSQL 发出错误:

ERROR:  permission denied for table candidates

要将表 SELECT 上的权限授予 candidates 角色 joe ,请 GRANT 在 postgres ’ 会话中执行以下语句:

GRANT SELECT 
ON candidates 
TO joe;

六、 SELECT 从 joe 的会话中执行语句:

SELECT * FROM candidates;

PostgreSQL 返回空结果集而不是错误。

七、执行如下 INSERT 语句:

INSERT INTO candidates(first_name, last_name, email, phone)
VALUES('Joe','Com','[email protected]','408-111-2222');

PostgreSQL 发出以下错误,因为 joe 没有 INSERT 该 candidates 表的权限:

ERROR:  permission denied for table candidates

第八,补助 INSERT , UPDATE 以及 DELETE 对权限 candidates 表的作用 joe :

GRANT INSERT, UPDATE, DELETE
ON candidates 
TO joe;

第九, INSERT 从 joe 的会话中再次执行语句:

INSERT INTO candidates(first_name, last_name, email, phone)
VALUES('Joe','Com','[email protected]','408-111-2222');

现在, joe 可以向 candidates 表中插入数据了。此外,它还可以更新或删除表中的数据。

更多 PostgreSQL GRANT 示例

让我们再举一些使用该 GRANT 语句的示例。

将表的所有权限授予角色

以下语句将 candidates 表上的所有权限授予角色 joe :

GRANT ALL
ON candidates
TO joe;

将模式中所有表的所有权限授予角色

以下语句 public 将 dvdrental 示例数据库模式中所有表的所有权限授予角色 joe :

GRANT ALL
ON ALL TABLES
IN SCHEMA "public"
TO joe;

在所有表上授予 SELECT

有时,您希望创建一个只读角色,该角色只能从指定架构中的所有表中选择数据。

为此,您可以像这样授予架构中 SELECT 所有表的权限 public :

GRANT SELECT
ON ALL TABLES
IN SCHEMA "public"
TO reader;

到目前为止,您已经学习了如何授予表的权限。要授予其他对象的权限,检查出来的 GRANT 语句的语法。

概括

  • 使用该 GRANT 语句将数据库对象的权限授予角色。