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';
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语句将数据库对象的权限授予角色。