PG入门postgreSQL用户角色和权限管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PG入门postgreSQL用户角色和权限管理相关的知识,希望对你有一定的参考价值。

用户角色管理


创建用户角色

create user cjr LOGIN;
create role cjr1 CREATEDB;
create role cjr2 superuser;
create user cjr3 encrypted password 123456 valid until 2022-10-28;
create user admin with SUPERUSER password 123;

注: 属性LOGIN、SUPERUSER和CREATEROLE被视为特殊权限,它们不会像其它数据库对象的普通权限那样被继承。
加了WITH ADMIN OPTION 则允许被授予的用户继续将权限授予给其他人。
user\\role区别
user 拥有login登陆数据库权限的role

PG入门(3)postgreSQL用户角色和权限管理_数据库


修改用户

postgres=# alter user admin with password 1234;
通过 \\help alter user


删除用户

drop user username ;
drop role rolename;
DROP ROLE IF EXISTS



权限管理

每个数据库对象都有一个所有者,默认情况下,所有者拥有该对象的所有权限
在数据库中所有的权限都和角色挂钩,postgresql权限分为两部分:
“系统权限”或者数据库用户的属性
数据库对象上的操作权限(内置权限)

对超级用户postgres不做权限检查,其它用户走ACL(Access ControL List)
对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL


PG入门(3)postgreSQL用户角色和权限管理_数据库_02

PG入门(3)postgreSQL用户角色和权限管理_系统权限_03


PG入门(3)postgreSQL用户角色和权限管理_数据库_04


可通过以下方式禁止用户登录
ALTER ROLE c WITH NOLOGIN;

INHERIT该属性使组成员拥有组的所有权限
ALTER ROLE


实例权限

主要由pg_hba.conf来控制,例如 :
TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 trust
host all postgres 0.0.0.0/0 reject
host all all 0.0.0.0/0 md5

以上配置的解释
允许任何本地用户无密码连接任何数据库
不允许postgres用户从任何外部地址连接任何数据库
允许其他任何用户从外部地址通过密码连接任何数据库


库级别权限

包括允许连接数据库,允许在数据库中创建schema。
默认情况下,数据库在创建后
允许public角色连接,即允许任何人连接
不允许除了超级用户和owner之外的任何人在数据库中创建schema
会自动创建名为public 的schema,这个schema的all权限已经赋予给public角色即允许任何人在里面创建对象


shema级别权限

包括允许查看schema中的对象,允许在schema中创建对象。
默认情况下新建的schema的权限不会赋予给public角色
除了超级用户和owner,任何人都没有权限查看schema中的对象或者在schema中新建对象


赋予权限

GRANT示例:
GRANT ALL ON database dbname TO rolename;
GRANT UPDATE ON tabname TO demo_role;
GRANT SELECT ON ALL TABLES IN SCHEMA schemaname to rolename;
GRANT ALL ON tabname TO rolename;
GRANT ROLE1 TO USER1; (注:角色的属性不会授予用户)
GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw; #列授权


查看权限

显示角色属性(包含系统权限)
\\du 或\\du+ [username]
查看系统表 select * from pg_roles|pg_user;
查看某用户或角色的权限
select * from information_schema.table_privileges where grantee=repuser;
显示对象的访问权限列表
\\z或\\dp [tablename]


回收权限

REVOKE
语法格式如下:
REVOKE permission_type ON table_name FROM user_name;
其中permission_type和table_name含义与GRANT指令中相同
\\h revoke

示例:
REVOKE ALL ON accounts FROM PUBLIC;
其含义为:对所有角色(PUBLIC)撤销在accounts对象上的所有权限(ALL)


PG入门(3)postgreSQL用户角色和权限管理_系统权限_05


权限实验

appadmin下app1无法使用appadmin用户创建的表

PG入门(3)postgreSQL用户角色和权限管理_系统权限_06

set role appadmin;后可以使用了

PG入门(3)postgreSQL用户角色和权限管理_创建对象_07


创建用户赋权

PG入门(3)postgreSQL用户角色和权限管理_创建对象_08

PG入门(3)postgreSQL用户角色和权限管理_创建对象_09

以上是关于PG入门postgreSQL用户角色和权限管理的主要内容,如果未能解决你的问题,请参考以下文章

pg快速入门--权限管理

pg权限系统

PG基础篇--逻辑结构管理(用户及权限管理)

一文全搞懂postgresql的权限

PostgreSQL之用户角色权限管理

PostgreSQL之用户角色权限管理