本文介绍PostgreSQL 权限管理,使用GRANT 授权,REVOKE撤销权限。
授权
使用 login 属性创建角色之后,角色可以登录数据库,但不能对数据库对象做任何事情,如表、视图、函数等。为了让角色与数据库对象进行交互,需要数据库对象权限给角色。下面示例给角色授权:
GRANT privilege_list | ALL
ON table_name
TO role_name;
- privilege_list 包括
SELECT
,INSERT
,UPDATE
,DELETE
,TRUNCATE
等,也可以使用 ALL 选项授予表所有权限给角色。 - 在ON 关键字后面指定表名称
- TO关键字后面被授权角色的名称
示例说明
首先使用postgres 用户(超级管理员)连接数据并创建角色:
create role joe
login
password 'pwd123abc';
假设数据库中有表 candidates ,我们现在使用joe 角色执行查询:
SELECT * FROM candidates;
-- ERROR: permission denied for table candidates
因为joe没有select权限,现在使用grant进行授权:
GRANT SELECT
ON candidates
TO joe;
SELECT * FROM candidates;
再次查询不再报错。
我们执行插入语句:
INSERT INTO candidates(first_name, last_name, email, phone)
VALUES('Joe','Com','joe.com@example.com','408-111-2222');
-- ERROR: permission denied for table candidates
现在再次给joe授权 INSERT, UPDATE, and DELETE:
GRANT INSERT, UPDATE, DELETE
ON candidates
TO joe;
INSERT INTO candidates(first_name, last_name, email, phone)
VALUES('Joe','Com','joe.com@example.com','408-111-2222');
现在执行插入不再报错。
另外我们还可以一次性授予表所有权限:
GRANT ALL
ON candidates
TO joe;
授予特定schema下所有表所有权限:
GRANT ALL
ON ALL TABLES
IN SCHEMA "public"
TO joe;
当然也可以部分授权,下面给public下把所有表的select权限授予reader 角色:
GRANT SELECT
ON ALL TABLES
IN SCHEMA "public"
TO reader;
回收权限
REVOKE 语句收回已授权角色的权限。语法如下:
REVOKE privilege | ALL
ON TABLE table_name | ALL TABLES IN SCHEMA schema_name
FROM role_name;
- revoke 指定一个或多个回收权限,all表示所有权限
- on关键字后面指定表名称,也可以指定特定schema下所有表
- 最后指定角色名称
示例说明
下面示例收回上面示例中授予的select权限:
GRANT SELECT
ON candidates
TO joe;
-- 收回所有权限
REVOKE ALL
ON film
FROM jim;
总结
本文介绍了PostgreSQL角色权限管理,当然也可以对其他数据对象权限进行管理,如: sequence, function, schema, database 。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/120521255