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 、 UPDATE和DELETE权限授予角色 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 角色可以更新或删除表中的数据。
输出: