[转帖]PG-用户|角色管理

pg,用户,角色,管理 · 浏览次数 : 0

小编点评

**角色属性** * **LOGIN**:用于检查角色是否可以用于数据库连接的初始角色名称。 * **SUPERUSER**:表示该角色拥有所有数据库权限。 * **CREATEDB**:表示该角色拥有创建数据库的权限。 * **CREATEROLE**:表示该角色拥有创建角色的权限。 * **INHERIT**:表示该角色继承了父角色的权限。 * **NOINHERIT**:表示该角色不会继承父角色的权限。 * **REPLICATION**:表示该角色可以进行数据库复制操作。 * **NOREPLICATION**:表示该角色禁止进行数据库复制操作。 * **BYPASSRLS**:表示该角色可以被用于 BYPASSRLS 功能。 * **NOBYPASSRLS**:表示该角色不可用于 BYPASSRLS 功能。 * **CONNECTION LIMIT**:表示该角色的连接限制。 * **ENCRYPTED**:表示该角色的密码使用加密。 * **PASSWORD**:表示该角色的密码设置方式。 * **VALIDATION**:表示该角色的密码有效期。 * **IN ROLE**:用于指定角色的成员关系。 **创建角色** ```sql CREATE ROLE name [ [ WITH ] option [ ... ] ] ``` * **name**:角色的名称。 * **WITH**:可选参数,指定角色的权限。 * **option**:可选参数,设置角色的选项。 * **...**:可选参数,包含角色的权限定义。 **查询角色** ```sql SELECT rolname FROM pg_roles; ``` **创建超级用户** ```sql CREATE ROLE name SUPERUSERdatabase creation创建数据库权限CREATE ROLE name CREATEDBrole creation数据库权限CREATE ROLE name CREATEROLEdatabase权限CREATE ROLE name INHERITdatabase权限CREATE ROLE name NOINHERITdatabase权限CREATE ROLE name REPLICATIONdatabase权限CREATE ROLE name NOREPLICATIONdatabase权限CREATE ROLE name BYPASSRLSdatabase权限CREATE ROLE name NOBYPASSRLSdatabase权限CREATE ROLE name CONNECTION LIMITdatabase权限CREATE ROLE name ENCRYPTEDdatabase权限CREATE ROLE name PASSWORDdatabase权限CREATE ROLE name VALIDATIONdatabase权限CREATE ROLE name IN ROLEdatabase权限GRANT pg_signal_backend TO admin_user; ``` **默认角色** ```sql pg_read_all_settings:允许管理员读取所有配置设置。 pg_read_all_stats:允许管理员读取所有pg_stat_*视图的信息。 pg_stat_scan_tables:允许管理员监控表上的ACCESS SHARE锁的使用情况。 pg_signal_backend:允许管理员向其他后端发送信号。 pg_read_server_files:允许管理员使用COPY以及其他文件访问函数从服务器上该数据库可访问的任意位置读取文件。 pg_write_server_files:允许管理员使用COPY以及其他文件访问函数在服务器上该数据库可访问的任意位置中写入文件。 pg_execute_server_program:允许管理员用运行该数据库的用户执行数据库服务器上的程序来配合COPY和其他允许执行服务器端程序的函数。 pg_monitor:允许管理员为监控数据库服务器的目的很容易地配置角色。 ```

正文

https://www.cnblogs.com/binliubiao/p/14415203.html

 

1. 角色

​ 决定发起连接的命令的初始访问权限。在PG中,角色用户相当于是一样的对象。区别在于创建角色时是否又Login权限。

1.1 创建角色

CREATE ROLE name;

postgres->postgres@[local]:5432=# \h create role
Command:     CREATE ROLE
Description: define a new database role
Syntax:
CREATE ROLE name [ [ WITH ] option [ ... ] ]

where option can be:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

-- 2.1 查询角色,检查pg_roles系统目录
SELECT rolname FROM pg_roles;
-- 2.2 psql程序的\du

1.2 角色属性

定义角色的权限并且与客户端认证系统交互

权限说明示例
login privilege 只有具有LOGIN属性的角色才能被用于一个数据库连接的初始角色名称。一个带有LOGIN属性的角色可以被认为和一个“数据库用户”相同。
CREATE USERCREATE ROLE等效,他们的区别:CREATE USER具有LOGIN权限,而CREATE ROLE没有LOGIN权限
CREATE ROLE name LOGIN;
CREATE USER name;
superuser status 一个数据库超级用户会绕开所有权限检查,除了登入的权利。 --创建超级用户
CREATE ROLE name SUPERUSER
database creation 创建数据库权限 CREATE ROLE name CREATEDB
role creation 创建角色权限。带有CREATEROLE权限的角色可以修改和删除其他角色,还可以授予或回收角色中的成员关系 CREATE ROLE name CREATEROLE
initiating replication 流复制角色。一个被用于流复制的角色必须也具有LOGIN权限。 CREATE ROLE name REPLICATION LOGIN
password 只有当客户端认证方法要求用户在连接数据库时提供一个口令时,一个口令才有意义。passwordmd5认证方法使用口令。 --创建角色时指定一个口令:
CREATE ROLE name PASSWORD 'string'。

1.3 角色成员关系

把用户分组在一起来便于管理权限常常很方便:那样,权限可以被授予一整个组或从一整个组回收。在PostgreSQL中通过创建一个表示组的角色来实现,并且然后将在该组角色中的成员关系授予给单独的用户角色。

使用GRANT和REVOKE命令增加和移除成员

GRANT group_role TO role1, ... ;
REVOKE group_role FROM role1, ... ;

组角色的成员可以以两种方式使用角色的权限。

  1. 一个组的每一个成员可以显式地执行SET ROLE命令来临时“成为”组角色。在这种状态中,数据库会话可以访问组角色而不是原始登录角色的权限,并且任何被创建的数据库对象被认为属于组角色而不是登录角色。
  2. 有INHERIT属性的成员角色自动地具有它们所属角色的权限,包括任何组角色继承得到的权限
-- 创建组角色 joe
CREATE ROLE joe LOGIN INHERIT;
-- 创建组角色 admin
CREATE ROLE admin NOINHERIT;
CREATE ROLE wheel NOINHERIT;

-- 为角色joe授予组角色admin权限
GRANT admin TO joe;
-- 为角色admin授予组角色wheel权限
GRANT wheel TO admin;

对于角色joe来说,它具有登录权限及授予给admin组角色权限。然而,授予给wheel的权限不可用,因为即使joewheel的一个间接成员(admin),但是该成员关系是通过带NOINHERIT属性的admin得到。

角色属性LOGINSUPERUSERCREATEDBCREATEROLE是一种特殊权限,但是它们从来不会像数据库对象上的普通权限那样被继承。要使用这些属性,必须显性执行SET ROLE到一个具有该属性的角色。

销毁一个组角色:DROP ROLE name;

任何在该组角色中的成员关系会被自动撤销。

1.4 删除角色

由于角色可以拥有数据库对象并且能持有访问其他对象的特权。要删除角色必须先将该用户拥有的对象删除或转移给其他拥有者,并将已授予该角色的权限已经被回收。

-- 转移对象拥有者
ALTER TABLE bobs_table OWNER TO alice;

移除曾经拥有过对象的角色的方法

REASSIGN OWNED BY doomed_role TO successor_role;
DROP OWNED BY doomed_role;
-- 在集簇中的每一个数据库中重复上述命令
DROP ROLE doomed_role;

1.5 默认角色

PostgreSQL提供了一组默认角色,它们提供对特定的、通常需要的、需要特权的功能和信息的访问。

角色允许的访问
pg_read_all_settings 读取所有配置变量,甚至是那些通常只对超级用户可见的变量。
pg_read_all_stats 读取所有的pg_stat_*视图并且使用与扩展相关的各种统计信息,甚至是那些通常只对超级用户可见的信息。
pg_stat_scan_tables 执行可能会在表上取得ACCESS SHARE锁的监控函数(可能会持锁很长时间)。
pg_signal_backend 向其他后端发送信号(例如:取消查询、中止)。
pg_read_server_files 允许使用COPY以及其他文件访问函数从服务器上该数据库可访问的任意位置读取文件。
pg_write_server_files 允许使用COPY以及其他文件访问函数在服务器上该数据库可访问的任意位置中写入文件。
pg_execute_server_program 允许用运行该数据库的用户执行数据库服务器上的程序来配合COPY和其他允许执行服务器端程序的函数。
pg_monitor 读取/执行各种监控视图和函数。这个角色是pg_read_all_settingspg_read_all_stats以及pg_stat_scan_tables的成员。

pg_read_server_filespg_write_server_files以及pg_execute_server_program角色的目的是允许管理员有一些可信但不是超级用户的角色来访问文件以及以运行数据库的用户在数据库服务器上运行程序。由于这些角色能够防伪服务器文件系统上的任何文件,因此在直接访问文件时它们会绕过任何数据库级别的权限检查并且它们可以被用来得到超级用户级别的访问,因此在把这些角色授予给用户时应当非常小心。

pg_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tables角色的目的是允许管理员能为监控数据库服务器的目的很容易地配置角色。它们授予一组常用的特权,这些特权允许角色读取各种有用的配置设置、统计信息以及通常仅限于超级用户的其他系统信息。

管理员可以用GRANT命令把对这些角色的访问授予给用户GRANT pg_signal_backend TO admin_user;

1.6 管理用户密码

-- 登录(psql)

psql -U admin postgres

-- alter命令修改用户密码:
alter user user_name with password 'new password';

-- # 注意密码是单引号`'`包围的内容,最后的`;`号

-- 修改密码过期时间:
alter user user_name with valid until '2021-01-01 08:00:00';
\du+ user_name

-- 改为永不过期:
alter user user_name with valid until 'infinity';

-- 检查确认
select * from pg_user; 
select * from pg_shadow;

与[转帖]PG-用户|角色管理相似的内容:

[转帖]PG-用户|角色管理

https://www.cnblogs.com/binliubiao/p/14415203.html 1. 角色 ​ 决定发起连接的命令的初始访问权限。在PG中,角色和用户相当于是一样的对象。区别在于创建角色时是否又Login权限。 1.1 创建角色 CREATE ROLE name; postgr

[转帖]PostgreSQL | 学习一下Barman备份,防止删库跑路(一)

https://www.modb.pro/db/48181 PostgreSQL PRIP备份 PostgreSQL官方文档指定了以下三种备份方法,详见:https://www.postgresql.org/docs/current/backup.html 「SQL转储」,用pg_dump或pgdu

[转帖]pg_hba.conf 中 md5 和 scram-sha-256 的区别

db: postgresql 11 auth-method 指定当一个连接匹配这个记录时,要使用的认证方法。下面对可能的选择做了概述,详见第 20.3 节。 trust 无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身

[转帖]Linux:页表中PGD、PUD、PMD、TLB等概念介绍

1、PGD: Page Global Directory Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的。当创建一个新的进程时,都要为新进程创建一个新的页面目录PGD,并从内核的页面目录swapper_pg_dir中复制内核区间页面目录项至新建进程页面目

[转帖]PG Exporter

http://v0.pigsty.cc/zh/docs/reference/kernel-optimize/ Exporter https://github.com/Vonng/pg_exporter 完全自研的 pg_exporter, 用于收集postgres与pgbouncer的指标: 支持P

[转帖]pgbench(postgresql压力测试工具)

pgbench 名称 pgbench -- 在PostgreSQL中执行基准线测试 大纲 pgbench -i [option...] [dbname] pgbench [option...] [dbname] 描述 pgbench是一个用于在PostgreSQL数据库中运行基准测试的简单程序。pg

[转帖]PostgreSQL任意命令执行漏洞利用(CVE-2019-9193)

https://zhuanlan.zhihu.com/p/143443516 最近没事曰曰内网,偶然发现了一个使用空密码的pg(是的,连爆破都省了)。用navicat连上去看了下几个库都是一些业务测试数据,没什么好收集;不死心,google了一下发现有个比较新的CVE好像可以操作一下~ 漏洞概述 最

[转帖]PG网络传输安全SSL介绍及使用示例

PG网络传输安全SSL介绍及使用示例 https://www.cnblogs.com/cqdba/p/16550937.html 目录 SSL 概念介绍 1.1 SSL介绍 1.2 openssl 的req 参数说明 1.3 SSL 请求模式说明 1.4密码套件类别 SSL 类型介绍 2.1自签名私

[转帖]postgresql 的 pg_hba.conf 的行记录顺序

postgresql: 9.6 一直觉得 pg_hba.conf 的行记录与顺序无关,遵循细化优先的规则。今天在回顾 pg_hba.conf 文档时发现这种认识是错的。 下面这段话是从文档拷贝过来的: 因为每一次连接尝试都会顺序地检查pg_hba.conf记录,所以这些记录的顺序是非常关键的。通常,

[转帖]Oracle、MySQL、PG是如何处理数据库“半页写”的问题的?

数据库“断页”是个很有意思的话题,目前任何数据库应该都绕不过去。我们知道数据库的块大小一般是8k、16k、32k,而操作系统块大小是4k,那么在数据库刷内存中的数据页到磁盘上的时候,就有可能中途遭遇类似操作系统异常断电而导致数据页部分写的情况,进而造成数据块损坏,数据块损坏对于某些数据库是致命的,可