PG-用户|角色管理

摘要:
一个带有LOGIN属性的角色可以被认为和一个“数据库用户”相同。CREATEROLEnameREPLICATIONLOGINpassword只有当客户端认证方法要求用户在连接数据库时提供一个口令时,一个口令才有意义。在PostgreSQL中通过创建一个表示组的角色来实现,并且然后将在该组角色中的成员关系授予给单独的用户角色。要使用这些属性,必须显性执行SETROLE到一个具有该属性的角色。要删除角色必须先将该用户拥有的对象删除或转移给其他拥有者,并将已授予该角色的权限已经被回收。

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-用户|角色管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker中运行redis报错误: Failed opening the RDB file root (in server root dir /etc/cron.d) for saving: Permission denied解决:微信小程序富文本识别不了空白p标签的方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

canvas基础绘制矩形(1)

1.画布基础知识画布元素是HTML5中添加的一个重要元素,专门用于绘制图形。然而,画布本身不具备绘制图形的能力。将画布元素放置在页面上相当于在页面上放置矩形“画布”。我们可以使用js脚本在“画布”上绘制图形。...

HTTP请求报文

不仅报表样式可以传递请求参数,请求url也可以以类似于键值对的方式传递数据...

zabbix监控华为交换机

xmlversion=“1.0”encoding=“UTF-8”?...

Excel数据透视表、高级筛选

目录:1.数据透视表:数据透视表格式和操作说明:多个表一起创建数据透视表创建组创建计算字段创建计算项值显示方法切片器2。高级过滤:高级过滤和或关系精确过滤和模糊过滤通配符过滤原则查询不重复值(使用高级过滤)高级过滤区分大小写使用高级过滤查找空数据使用高级过滤查询两个表中相同的记录或未使用的记录过滤记录1和数据透视表1.正确的数据透视表格式:① 数据源的第一行...

MAC接普通外置键盘的修改键位的方法

我使用Mac已经一年多了,现在我每天都越来越喜欢它。所有使用过Mac的学生都知道,Mac键盘的最大特点是它比普通键盘更具有命令键位置。普通键盘没有命令键。当我连接键盘时,我发现胜利键到处都是命令键。非常发达,所以你拥有mac下所需的所有密钥。但最关键的问题之一是,它们的顺序与Mac下的顺序不同。这与mac的使用习惯不一致。百度之后,我发现键盘可以修改。...

mongodb 占用内存及解决方法

解决方案是限制Swap的使用:[root@mongodb~]#Sysctl wvm。swap=0查看内存最常用的命令是空闲的:[root@mongodb~]#Free totalused freesharedbuff/cacheavailableEm:78250931925992443Swap:000当新手看到used列中的值太大而Free列中的数值太小时,...