Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PostgreSQL用户角色和权限管理

PostgreSQL用户角色和权限管理

作者头像
数据和云
发布于 2022-02-25 09:40:34
发布于 2022-02-25 09:40:34
5K00
代码可运行
举报
文章被收录于专栏:数据和云数据和云
运行总次数:0
代码可运行

一.用户角色管理

1.创建用户角色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

2.修改用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=# alter user admin with password '1234';通过 \help alter user 查看帮助文档

3.删除用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
drop user username ;drop role rolename;DROP ROLE IF EXISTS role_name;

注意事项:

1、只用超级用户能够删除超级用户。

2、只有具有createrole权限的用户能删除非超级用户。

3、删除用户前,需要先删除依赖该用户的对象、权限等信息。

4、任何属于该组角色的对象都必须先被删除或者将对象的所有者赋予其它角色,任何赋予该组角色的权限也都必须被撤消。

5、删除组role只会删除组的role本身,组的成员并不会被删除。

二.权限管理

每个数据库对象都有一个所有者,默认情况下,所有者拥有该对象的所有权限。

在数据库中所有的权限都和角色挂钩,PostgreSQL权限分为两部分:

  • “系统权限”或者数据库用户的属性
  • 数据库对象上的操作权限(内置权限)

对超级用户Postgres不做权限检查,其它用户走ACL(Access ControL List)。

对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL。

可通过以下方式禁止用户登录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER ROLE c WITH NOLOGIN;

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER ROLE c NOINHERIT;

1.实例权限

主要由pg_hba.conf来控制,例如 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TYPE DATABASE USER ADDRESS METHODhost all all 127.0.0.1/32 trusthost all postgres 0.0.0.0/0 rejecthost all all 0.0.0.0/0 md5

以上配置的解释:

  • 允许任何本地用户无密码连接任何数据库。
  • 不允许Postgres用户从任何外部地址连接任何数据库。
  • 允许其他任何用户从外部地址通过密码连接任何数据库。

2.库级别权限

包括允许连接数据库,允许在数据库中创建schema。

默认情况下,数据库在创建后:

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

3.shema级别权限

包括允许查看schema中的对象,允许在schema中创建对象。

默认情况下新建的schema的权限不会赋予给public角色。

除了超级用户和owner,任何人都没有权限查看schema中的对象或者在schema中新建对象。

4.赋予权限

GRANT示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;  #列授权
特殊符号:ALL代表所访问权限,PUBLIC代表所有用户

5.查看权限

显示角色属性(包含系统权限):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\du 或\du+ [username] 

查看系统表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from pg_roles|pg_user;

查看某用户或角色的权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from information_schema.table_privileges where grantee='repuser';

显示对象的访问权限列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\z或\dp [tablename]

6.回收权限:

REVOKE 语法格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
REVOKE permission_type ON table_name FROM user_name;

其中permission_type和table_name含义与GRANT指令中相同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
\h revoke

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
REVOKE ALL ON accounts FROM PUBLIC;

其含义为:对所有角色(PUBLIC)撤销在accounts对象上的所有权限(ALL)。

7.权限实验

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

set role appadmin;后可以使用了:

8.创建用户赋权


墨天轮原文链接:https://www.modb.pro/db/150315?sjhy

关于作者

陈家睿,云和恩墨MySQL技术顾问,拥有MySQL OCP、PGCE、OBCA、SCDP证书,长期服务于电信行业。现负责公司MySQL数据库分布式数据库运维方面的技术工作;热衷于运维故障处理、备份恢复、升级迁移、性能优化的学习与分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PostgreSQL之Foreign Data Wrappers使用指南
PostgreSQL的fdw实现的功能是各个postgresql数据库及远程数据库之间的跨库操作,功能和Oracle的dblink一样。 本文中的环境如下图所示:
星哥玩云
2022/08/17
8530
PostgreSQL之Foreign Data Wrappers使用指南
postgresql自己总结用户管理
postgres安装完成后,会自动在操作系统和postgres数据库中分别创建一个名为postgres的用户以及一个同样名为postgres的数据库。
双面人
2023/02/01
8330
POSTGRESQL 权限问题,官方说必须是DBOWNER 和 SUPERUSE 才能进行DDL 操作,真的?
https://www.postgresql.org/docs/current/ddl-priv.html
AustinDatabases
2022/05/19
8600
POSTGRESQL 权限问题,官方说必须是DBOWNER 和 SUPERUSE 才能进行DDL 操作,真的?
oushudb-角色属性
一个数据库角色可以有一系列属性,这些属性定义他的权限,以及与客户认证系统的交互。 登陆权限 只有具有LOGIN属性的角色才可以用作数据库连接的初始角色名。 一个带有LOGIN属性的角色可以认为 是和”数据库用户”相同的事物。 要创建一个具有登录权限的角色,可以用下列命令之一: CREATE ROLE name LOGIN; CREATE USER name; 除了CREATE USER默认赋予登陆权限之外,CREATE USER 等价于CREATE ROLE(CREATE ROLE默认不 赋予)。 超级用户状态 数据库超级用户超越所有权限检查。这是一个需要谨慎使用的权限,建议大家最好使用非超级用户来完 成大多数工作 要创建数据库超级用户, 可用 CREATE ROLE name SUPERUSER 命令。 要执行这条命令,我们必须登 录已经是超级用户的角色来创建。 创建数据库 除超级用户以外,角色要想拥有创建数据库的权限,则必须明确给出。 我们可以用CREATE ROLE name CREATEDB这样的命令来创建角色。 创建角色 除超级用户以外,一个角色要想拥有创建角色的权限,在创建这样的角色时,需要使用CREATE ROLE name CREATEROLE 命令。 一个带有CREATEROLE权限的角色也可以更改和删除其它角色, 以及给其它角色赋予或者撤销成员关 系。不过,要创建、更改、删除一个超级用户角色的成员关系, 需要具有超级用户属性,只有 CREATEROLE还不够。 createuser name dropuser name SELECT rolname FROM pg_roles; DROP ROLE name; 口令 只有在客户认证方法要求与数据库建立连接必须使用口令的时候,口令才比较重要。口令拥有 password, md5和crypt等不同的认证方法。在创建角色的时候可以这样声明一个口令:CREATE ROLE name PASSWORD 'string'。 一个角色的属性可以在创建后用ALTER ROLE 修改。例如,一些常见的操作如下: 让一个角色能够创建其他角色和新的数据库: 更改一个角色的口令: 移除一个角色的口令: 更多的内容,大家可以参考手册中的讲解页面。
用户7454708
2023/05/08
1120
Postgresql 权限也能搞死你 之 小菜的一天 (2)
PostgreSQL的权限问题估计没有多少人会关注, 小菜经过上次的教训后,又找了一份工作,今天又是第一天上班,不过小菜到底有没有吸收了上次的教训. follow him
AustinDatabases
2019/12/24
6280
Postgresql 权限也能搞死你 之  小菜的一天 (2)
数据库用户权限管理
PostgreSQL使用角色的概念管理数据库访问权限。 根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户。 角色可以拥有数据库对象(比如表)以及可以把这些对象上的权限赋予其它角色, 以控制谁拥有访问哪些对象的权限。 操作角色的语句:
阮键
2020/04/30
1.5K0
美女DBA带你了解PostgreSQL用户及角色
墨墨导读:本文为大家讲述了PostgreSQL数据库的用户及角色,希望对刚接触PostgreSQL数据库的朋友们有帮助。
数据和云
2019/07/30
1.3K0
认识 PostgreSQL 基础权限体系
对于习惯MySQL 权限体系的朋友来说,MySQL 有 数据库,对象层面的权限,而PostgreSQL 多少有些不一样 PostgreSQL 的权限分为四类 : 实例,数据库,schame,对象。下面我们通过实际案例逐一了解。
用户1278550
2022/04/01
8560
认识 PostgreSQL 基础权限体系
PostgreSQL基础(三):PostgreSQL的基础操作
可以直接基于psql查看一些信息,也可以基于psql进入到命令行后,再做具体操作。
Lansonli
2024/09/13
7600
PostgreSQL基础(三):PostgreSQL的基础操作
数据库PostrageSQL-角色属性
login privilege 只有具有LOGIN属性的角色才能被用于一个数据库连接的初始角色名称。一个带有LOGIN属性的角色可以被认为和一个“数据库用户”相同。要创建一个带有登录权限的角色,使用两者之一:
cwl_java
2020/11/26
5970
HAWQ技术解析(五) —— 连接管理
        服务器启动后,还要经过一系列配置,才能被客户端程序所连接。本篇说明如何配置客户端身份认证,HAWQ的权限管理机制,HAWQ最常用的命令行客户端工具psql及与mysql命令行常用命令类
用户1148526
2018/01/03
1.9K0
HAWQ技术解析(五) —— 连接管理
GreenPlum的角色权限及客户端认证管理
Greenplum数据库使用roles管理数据库访问权限。角色的概念包含用户和组的概念。 一个角色可以是一个数据库用户、一个数据库组或者两者间距。角色可以拥有数据库对象(例如表),并可以将这些对象上的权限赋予其他角色,依此来控制对对象的访问。角色可以是其他角色的成员,因此成员角色可以继承其父角色的对象权限。
AiDBA宝典
2023/11/06
6830
GreenPlum的角色权限及客户端认证管理
从零开始学PostgreSQL (四): 数据库角色
在 PostgreSQL 中,角色(Roles)是用来管理数据库访问权限的一种机制。一个角色可以被认为是一个用户或一组用户。角色可以拥有数据库对象(如表、视图、函数等)并控制其他角色对这些对象的访问权限。角色的主要属性包括:
DBA实战
2024/09/06
3050
从零开始学PostgreSQL (四): 数据库角色
第03章 用户与权限管理
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
2720
Greenplum数据库使用总结(干货满满)--权限说明
每个数据库的逻辑结构对象都有一个所有者,所有者默认拥有所有的权限,不需要重新赋予。
小徐
2019/08/05
2.6K0
Postgresql数据库相关知识及注入
Postgresql是开源的,免费的,并且属于关系型数据库。他与mysql一样都依赖于 SQL(结构化查询语言)。
Tommonkey
2023/02/27
8150
Postgresql数据库相关知识及注入
OushuDB-数据库角色和权限-权限
权限 当你创建一个数据库对象时,你就称为它的所有者。默认情况下,只有对象的所有者和超级管理员可以 对它进行任何操作。要允许其他角色使用它,必须要经过权限授予。 OushuDB中好多种不同的权限:SELECT, INSERT, DELETE, TRUNCATE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE 和 USAGE 。适用于特定对象的权限因对象类型不同而不 同。 修改或者删除一个对象的权限是对象所有者独有的权限。要改变一个表、索引、序列或者视图的所有 者,可以使用ALTER TABLE命令,对于其他的类型也有相应的ALTER命令。 要赋予权限,可以使用GRANT命令。如果fred是一个已经存在的用户,而department是一个已经存在 的表,可以用下面的命令更新表的权限: 在权限的位置写上ALL则赋予所有与该对象类型相关的权限。 授权给名为PUBLIC的特殊”用户”可以用于将权限赋予系统中的所有用户。 另外,还可以使用”组”角色来 帮助管理一群用户的权限。 最后,我们可以使用REVOKE命令撤销权限: ALTER ROLE name CREATEROLE CREATEDB; ALTER ROLE name WITH PASSWORD 'newpassword'; ALTER ROLE name WITH PASSWORD NULL;
用户7454708
2023/05/08
4050
Greenplum数据库权限管理
每个数据库的逻辑结构对象都有一个所有者,所有者默认拥有所有的权限,不需要重新赋予。
小徐
2020/04/02
4.6K0
Greenplum数据库权限管理
PostgreSQL 操作命令
认证方式除“trust”外,还有“peer”, “ident”, “md5”, “password”等
Kevin song
2020/02/19
1.2K0
PostgreSQL 操作命令
进阶数据库系列(二十五):PostgreSQL 数据库日常运维管理
这是个bug,版本升级后,pg_config改变了,会导致后面装外部extension时没有装到指定目录。
民工哥
2023/08/22
1.6K0
进阶数据库系列(二十五):PostgreSQL 数据库日常运维管理
相关推荐
PostgreSQL之Foreign Data Wrappers使用指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验