📜  PostgreSQL – 授予

📅  最后修改于: 2022-05-13 01:57:15.127000             🧑  作者: Mango

PostgreSQL – 授予

PostgreSQL 中 GRANT语句用于向角色授予权限以更改表、视图、函数等数据库对象。

下面显示了 GRANT 语句的语法:

Syntax:
GRANT privilege_list | ALL 
ON  table_name
TO  role_name;

我们来分析一下上面的语法:

  • privilege_list 的一些元素是 SELECT、INSERT、UPDATE、DELETE、TRUNCATE 等。ALL 选项将所有可用权限授予角色。
  • 需要在 ON 关键字后提及表名。
  • 下一步是提及要授予权限的角色的名称。

例子:

创建一个名为“Anshul”的角色,可以登录PostgreSQL数据库服务器,如下图:



create role anshul
login 
password 'geeks12345';

现在创建一个名为候选人的表,如下所示:

create table Players (
    player_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(player_id)
);

现在,使用角色'Anshul'单独登录PostgreSQL数据库服务器,并尝试从Anshul的会话中选择players表中的数据:

SELECT * FROM players;

这里 PostgreSQL 将引发如下所示的错误:

ERROR:  permission denied for table players

要授予角色 anshul玩家表的 SELECT权限,可以在postgres 的会话中执行 GRANT语句,如下所示:

GRANT SELECT 
ON players
TO anshul;

现在,从 anshul 的会话中执行 SELECT 语句:

SELECT * FROM players;

七、执行下面的INSERT语句;

INSERT INTO players(first_name, last_name, email, phone)
VALUES('raju', 'kumar', 'raju.kumar@geeforgeeks.org', '408-111-2222');

PostgreSQL 发出以下错误,因为 anshul玩家上没有 INSERT 权限:

ERROR:  permission denied for table players

现在,将候选表上的INSERT UPDATEDELETE权限授予角色 anshul:

GRANT INSERT, UPDATE, DELETE
ON players
TO anshul;

九、再次从 anshul 的 session执行 INSERT 语句:

INSERT INTO players(first_name, last_name, email, phone)
VALUES('raju', 'kumar', 'raju.kumar@gmail.com', '408-111-2222');

现在, anshul 可以将数据插入到玩家表中。除此之外,Anshul 角色可以更新或删除表中的数据。

输出: