经验大分享:PostgreSQL学习之【用户权限管理】说明

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 经验大分享:PostgreSQL学习之【用户权限管理】说明

背景

最近在学习PostgreSQL,看了用户权限管理文档,涉及到的知识点比较多,顺便写篇文章进行整理并不定时更新,也方便自己后续进行查阅。

说明

注意:创建好用户(角色)之后需要连接的话,还需要修改2个权限控制的配置文件(pg_hba.conf、pg_ident.conf)。并且创建用户(user)和创建角色(role)一样,唯一的区别是用户默认可以登录,而创建的角色默认不能登录。创建用户和角色的各个参//代码效果参考:http://www.zidongmutanji.com/zsjx/545199.html

数选项是一样的。

Tip:安装PostgreSQL会自动创建一个postgres用户,需要切换到该用户下访问PostgreSQL。

创建用户/角色

CREATE USER/ROLE name 【 【 WITH 】 option 【 ... 】 】 : 关键词 USER,ROLE; name 用户或角色名;

where option can be:

SUPERUSER | NOSUPERUSER :超级权限,拥有所有权限,默认nosuperuser。

| CREATEDB | NOCREATEDB :建库权限,默认nocreatedb。

| CREATEROLE | NOCREATEROLE :建角色权限,拥有创建、修改、删除角色,默认nocreaterole。

| INHERIT | NOINHERIT :继承权限,可以把除superuser权限继承给其他用户/角色,默认inherit。

| LOGIN | NOLOGIN :登录权限,作为连接的用户,默认nologin,除非是create user(默认登录)。

| REPLICATION | NOREPLICATION :复制权限,用于物理或则逻辑复制(复制和删除slots),默认是noreplication。

| BYPASSRLS | NOBYPASSRLS :安全策略RLS权限,默认nobypassrls。

| CONNECTION LIMIT connlimit :限制用户并发数,默认-1,不限制。正常连接会受限制,后台连接和prepared事务不受限制。

| 【 ENCRYPTED 】 PASSWORD 'password' | PASSWORD NULL :设置密码,密码仅用于有login属性的用户,不使用密码身份验证,则可以省略此选项。可以选择将空密码显式写为PASSWORD NULL。

//代码效果参考:http://www.zidongmutanji.com/zsjx/155367.html

加密方法由配置参数password_encryption确定,密码始终以加密方式存储在系统目录中。

| VALID UNTIL 'timestamp' :密码有效期时间,不设置则用不失效。

| IN ROLE role_name 【, ...】 :新角色将立即添加为新成员。

| IN GROUP role_name 【, ...】 :同上

| ROLE role_name 【, ...】 :ROLE子句列出一个或多个现有角色,这些角色自动添加为新角色的成员。 (这实际上使新角色成为“组”)。

| ADMIN role_name 【, ...】 :与ROLE类似,但命名角色将添加到新角色WITH ADMIN OPTION,使他们有权将此角色的成员资格授予其他人。

| USER role_name 【, ...】 :同上

| SYSID uid :被忽略,但是为向后兼容性而存在。

示例:

创建不需要密码登陆的用户zjy:

postgres=# CREATE ROLE zjy LOGIN;

CREATE ROLE

创建该用户后,还不能直接登录。需要修改 pg_hba.conf 文件(后面会对该文件进行说明),加入:

①:本地登陆:local all all trust

②:远程登陆:host all all 192.168.163.132/32 trust

创建需要密码登陆的用户zjy1:

postgres=# CREATE USER zjy1 WITH PASSWORD 'zjy1';

CREATE ROLE

和ROLE的区别是:USER带LOGIN属性。也需要修改 pg_hba.conf 文件(后面会对该文件进行说明),加入:

host all all 192.168.163.132/32 md5

创建有时间限制的用户zjy2:

postgres=# CREATE ROLE zjy2 WITH LOGIN PASSWORD 'zjy2' VALID UNTIL '2019-05-30';

CREATE ROLE

和2的处理方法一样,修改 pg_hba.conf 文件,该用户会的密码在给定的时间之后过期不可用。

创建有创建数据库和管理角色权限的用户admin:

postgres=# CREATE ROLE admin WITH CREATEDB CREATEROLE;

CREATE ROLE

注意:拥有创建数据库,角色的用户,也可以删除和修改这些对象。

创建具有超级权限的用户:admin

postgres=# CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'admin';

CREATE ROLE

创建复制账号:repl

postgres=# CREATE USER repl REPLICATION LOGIN ENCRYPTED PASSWORD 'repl';

CREATE ROLE

其他说明

创建复制用户

CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD '';

CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD 'abc';

ALTER USER work WITH ENCRYPTED password '';

创建scheme 角色

CREATE ROLE abc;

CREATE DATABASE abc WITH OWNER abc ENCODING UTF8 TEMPLATE template0;

\c abc

创建schema

CREATE SCHEMA abc;

ALTER SCHEMA abc OWNER to abc;

revoke create on schema public from public;

创建用户

create user abc with ENCRYPTED password '';

GRANT abc to abc;

ALTER ROLE abc WITH abc;

##创建读写账号

CREATE ROLE abc_rw;

CREATE ROLE abc_rr;

##赋予访问数据库权限,schema权限

grant connect ON DATABASE abc to abc_rw;

GRANT USAGE ON SCHEMA abc TO abc_rw;

##赋予读写权限

grant select,insert,update,delete ON ALL TABLES IN SCHEMA abc to abc;

赋予序列权限

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA abc to abc;

赋予默认权限

ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select,insert,update,delete ON TABLES TO abc;

赋予序列权限

ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT ALL PRIVILEGES ON SEQUENCES TO abc;

#用户对db要有连接权限

grant connect ON DATABASE abc to abc;

#用户要对schema usage 权限,不然要select * from schema_name.table ,不能用搜索路径

GRANT USAGE ON SCHEMA abc TO abc;

grant select ON ALL TABLES IN SCHEMA abc to abc;

ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select ON TABLES TO abc;

create user abc_w with ENCRYPTED password '';

create user abc_r with ENCRYPTED password '';

GRANT abc_rw to abc_w;

GRANT abc_rr to abc_r;

View Code

授权,定义访问权限

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }

【, ...】 | ALL 【 PRIVILEGES 】 }

ON { 【 TABLE 】 table_name 【, ...】

| ALL TABLES IN SCHEMA schema_name 【, ...】 }

TO role_specification 【, ...】 【 WITH GRANT OPTION 】

##单表授权:授权zjy账号可以访问schema为zjy的zjy表

grant select,insert,update,delete on zjy.zjy to zjy;

##所有表授权:

grant select,insert,update,delete on all tables in schema zjy to zjy;

GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name 【, ...】 )

【, ...】 | ALL 【 PRIVILEGES 】 ( column_name 【, ...】 ) }

ON 【 TABLE 】 table_name 【, ...】

TO role_specification 【, ...】 【 WITH GRANT OPTION 】

##列授权,授权指定列(zjy schema下的zjy表的name列)的更新权限给zjy用户

grant update (name) on zjy.zjy to zjy;

##指定列授不同权限,zjy schema下的zjy表,查看更新name、age字段,插入name字段

grant select (name,age),update (name,age),insert(name) on zjy.xxx to zjy;

GRANT { { USAGE | SELECT | UPDATE }

【, ...】 | ALL 【 PRIVILEGES 】 }

ON { SEQUENCE sequence_name 【, ...】

| ALL SEQUENCES IN SCHEMA schema_name 【, ...】 }

TO role_specification 【, ...】 【 WITH GRANT OPTION 】

##序列(自增键)属性授权,指定zjy schema下的seq_id_seq 给zjy用户

grant select,update on sequence zjy.seq_id_seq to zjy;

##序列(自增键)属性授权,给用户zjy授权zjy schema下的所有序列

grant select,update on all sequences in schema zjy to zjy;

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } 【, ...】 | ALL 【 PRIVILEGES 】 }

ON DATABASE database_name 【, ...】

TO role_specification 【, ...】 【 WITH GRANT OPTION 】

##连接数据库权限,授权cc用户连接数据库zjy

grant connect on database zjy to cc;

GRANT { USAGE | ALL 【 PRIVILEGES 】 }

ON DOMAIN domain_name 【, ...//代码效果参考:http://www.zidongmutanji.com/zsjx/132897.html

TO role_specification 【, ...】 【 WITH GRANT OPTION 】

##

GRANT { USAGE | ALL 【 PRIVILEGES 】 }

ON FOREIGN DATA WRAPPER fdw_name 【, ...】

TO role_specification 【, ...】 【 WITH GRANT OPTION 】

##

GRANT { USAGE | ALL 【 PRIVILEGES 】 }

ON FOREIGN SERVER server_name 【, ...】

TO role_specification 【, ...】 【 WITH GRANT OPTION 】

##

GRANT { EXECUTE | ALL 【 PRIVILEGES 】 }

ON { { FUNCTION | PROCEDURE | ROUTINE } routine_name 【 ( 【 【 argmode 】 【 arg_name 】 arg_type 【, ...】 】 ) 】 【, ...】

| ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name 【, ...】 }

TO role_specification 【, ...】 【 WITH GRANT OPTION <span style="color: rgba(255, 0

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6月前
|
关系型数据库 MySQL 数据库
认真学习MySQL中的角色权限控制
认真学习MySQL中的角色权限控制
129 0
|
SQL 关系型数据库 测试技术
沉浸式学习PostgreSQL|PolarDB 20: 学习成为数据库大师级别的优化技能
在上一个实验《沉浸式学习PostgreSQL|PolarDB 19: 体验最流行的开源企业ERP软件 odoo》 中, 学习了如何部署odoo和polardb|pg. 由于ODOO是非常复杂的ERP软件, 对于关系数据库的挑战也非常大, 所以通过odoo业务可以更快速提升同学的数据库优化能力, 发现业务对数据库的使用问题(如索引、事务对锁的运用逻辑问题), 数据库的代码缺陷, 参数或环境配置问题, 系统瓶颈等.
943 1
|
5月前
|
存储 关系型数据库 数据库
经验大分享:PostgreSQL学习之【用户权限管理】说明
经验大分享:PostgreSQL学习之【用户权限管理】说明
66 0
|
关系型数据库 分布式数据库 数据库
|
运维 Oracle 关系型数据库
PolarDB for PostgreSQL 开源必读手册-用户和权限管理(下)
企业运维之云上网络原理与实践-用户和权限管理
185 0
|
关系型数据库 分布式数据库 数据库
|
SQL 存储 监控
【学习资料】第3期PostgreSQL 数据库安全指南 - 以及安全合规
大家好,这里是PostgreSQL 数据库安全指南 - 以及安全合规
|
存储 关系型数据库 物联网
数据库选型十八摸 之 PostgreSQL - 致 架构师、开发者
标签 PostgreSQL , 数据库特性 , 数据库应用场景分析 , 数据库选型 背景 数据库对于一家企业来说,相比其他基础组件占据比较核心的位置。 有很多企业由于最初数据库选型问题,导致一错再错,甚至还有为此付出沉痛代价的。
13868 1
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 21 章 数据库角色
第 21 章 数据库角色 目录 21.1. 数据库角色 21.2. 角色属性 21.3. 角色成员关系 21.4. 删除角色 21.5. 默认角色 21.6. 函数和触发器安全性 PostgreSQL使用角色的概念管理数据库访问权限。
1218 0
|
SQL 关系型数据库 数据库
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 21 章 数据库角色_21.1. 数据库角色
21.1. 数据库角色 数据库角色在概念上已经完全与操作系统用户独立开来。事实上可能维护一个对应关系会比较方便,但是这并非必需。数据库角色在一个数据库集簇安装范围内是全局的(而不是独立数据库内)。
1311 0