• 【PG】PostgresSQL角色管理


    目录

    角色概念

    查询现有角色

    列出当前角色 

    创建角色

    删除角色

    更改角色 

    创建角色举例

    预定义角色

    角色属性

    登陆角色

    超级用户角色

    创建数据库角色

    创建role角色

    复制角色

    创建带有密码的角色

    角色成员关系

    角色组概念

    角色组增加成员

    角色组移除成员

    删除角色

    默认角色


    角色概念

    PostgreSQL使用角色的概念管理数据库访问权限。一个角色可以被看成是一个数据库用户或者是一个数据库用户组,这取决于角色被怎样设置。角色可以拥有数据库对象(例如,表和函数)并且能够把那些对象上的权限赋予给其他角色来控制谁能访问哪些对象。此外,还可以把一个角色中的成员资格授予给另一个角色,这样允许成员角色使用被赋予给另一个角色的权限。

    角色的概念把“用户”和“组”的概念都包括在内。在PostgreSQL版本 8.1 之前,用户和组是完全不同的两种实体,但是现在只有角色。任意角色都可以扮演用户、组或者两者

     重点:角色 == 用户 或 角色 == 用户组

    查询现有角色

     select rolname from pg_roles;

    列出当前角色 

    \du

    创建角色

    1. create role name login;
    2. 等同于
    3. create user name;

    删除角色

    1. drop role name;
    2. 等同于
    3. drop user name;

    更改角色 

    ALTER ROLE — 更改一个数据库角色;

    alter role role3 login;

    创建角色举例

    1. # 只有登录权限的角色
    2. create role onlylogin LOGIN;
    3. # 具有创建数据库 创建角色 登录的角色
    4.  create user admin with CREATEDB CREATEROLE;
    5. # 创建一个带有密码 并且 密码有效期截止到2025-01-01的角色
    6. CREATE ROLE testlogin WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2025-01-01';

    预定义角色

    为了引导数据库系统,一个刚刚被初始化好的系统总是包含一个预定义角色。这个角色总是一个“superuser”,并且默认情况下(除非在运行initdb时修改)它的名字和初始化数据库集簇的操作系统用户相同。习惯上,这个角色将被命名为postgres。为了创建更多角色,你首先必须以初始角色的身份连接。

    重点:超级用户和初始化数据库的操作系统用户名称相同,一般是postgres。

    角色属性

    登陆角色

    1. CREATE ROLE name LOGIN;
    2. 等同于
    3. CREATE USER name;

    CREATE USERCREATE ROLE等效,除了CREATE USER默认带有LOGIN,而CREATE ROLE创建的角色不带有LOGIN

    超级用户角色

    一个数据库超级用户会绕开所有权限检查。这是一个危险的权限并且应该小心使用,最好用一个不是超级用户的角色来完成你的大部分工作,创建该角色的用户必须是一个超级用户。

    CREATE ROLE name SUPERUSER

    创建数据库角色

    一个角色必须被显式给予创建数据库的权限才能创建数据库

    CREATE ROLE name CREATEDB;

    创建role角色

    一个角色必须被显式给予权限才能创建更多角色(除了超级用户,因为它们会绕开所有权限检查)。一个带有CREATEROLE权限的角色也可以修改和删除其他角色,还可以授予或回收角色中的成员关系。然而,要创建、修改、删除或修改一个超级用户角色的成员关系,需要以超级用户的身份操作。CREATEROLE不足以完成这一切

    CREATE ROLE name CREATEROLE

    复制角色

    一个角色必须被显式给予权限才能发起流复制(除了超级用户,因为它们会绕开所有权限检查)。一个被用于流复制的角色必须也具有LOGIN权限。

    CREATE ROLE name REPLICATION LOGIN。

    创建带有密码的角色

    CREATE ROLE name PASSWORD 'string';

    角色成员关系

    角色组概念

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

    创建角色组和创建角色相同

    CREATE ROLE name;

    角色组增加成员

    向角色组 group_role 中增加曾院 role1 ;role1 和 group_role组具有相同角色

    GRANT group_role TO role1, ... ;

    角色组移除成员

    REVOKE group_role FROM role1, ... ;

    删除角色

    默认角色

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

    参考 

    ALTER ROLE

  • 相关阅读:
    高考假期预习指南:开启你的IT学习之旅
    【灵动之链】打造高效处理架构的双轨组合模式实战
    基于51单片机万年历设计—显示温度农历
    Java基础-字符串
    [附源码]计算机毕业设计JAVA基于JSP技术的新电商助农平台
    724. 寻找数组的中心下标
    OpenGL入门(二)
    NC14745 Hungry!
    情人节程序员用HTML网页表白【粒子告白】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
    Tomcat
  • 原文地址:https://blog.csdn.net/weixin_48154829/article/details/133698050