02:PostgreSQL用户和权限

news2024/11/15 7:17:39

环境:

  • 操作系统:CentOS 7.9 64bit
  • PostgreSQL 版本:16.x 或 15.x
  • 安装用户:postgres
  • 软件安装目标路径:/usr/pgsql-<version>
  • 数据库数据目录:/pgdata

目录

用户和角色

  创建用户或角色

  权限管理

  查看权限


用户和角色

  • 数据库在初始化时,会自动初始化一个超级用户。该超级用户与初始化的操作系统用户名相同,通常为postgres。
  • 数据库对象都有其owner属主。owner默认拥有所有权限,且无需授权。对对象alter和drop的权限为owner专属,不能grant授权别人。
  • 在PostgreSQL中,用户与角色几乎是没有区别,可以等同使用。

  创建用户或角色

--创建用户示例
CREATE USER user_zyp WITH CREATEDB CREATEROLE LOGIN PASSWORD '123456';

--语法格式
CREATE ROLE name [ [ WITH ] option [ ... ] ]
CREATE USER name [ [ WITH ] option [ ... ] ]

where option can be:
      SUPERUSER | NOSUPERUSER  (默认NOSUPERUSER)
    | CREATEDB | NOCREATEDB  (默认NOCREATEDB)
    | CREATEROLE | NOCREATEROLE  (默认NOCREATEROLE)
    | INHERIT | NOINHERIT  (默认INHERIT)
    | LOGIN | NOLOGIN  (创建ROLE默认NOLOGIN,创建USER默认LOGIN)
    | REPLICATION | NOREPLICATION  (默认NOREPLICATION)
    | BYPASSRLS | NOBYPASSRLS  (默认NOBYPASSRLS)
    | CONNECTION LIMIT connlimit  (默认-1不限制)
    | [ 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 [, ...]

创建用户和角色唯一的区别是:创建用户默认有login权限,创建角色默认没有login权限。

  权限管理

 权限分为两类:

  • 对于用户/角色权限(创建语句中option指定的权限),需要使用ALTER ROLE命令修改。
  • 对于对象权限(用户/角色对某写对象的权限),需要使用GRANT和REVOKE进行赋权或收回。

赋权或收回命令通常的命令格式(不同类型略有不同,参见官方文档):

--语句一般格式(不同类型略有不同)
GRANT some_privileges ON object_type object_name TO role_name  [ WITH GRANT OPTION ];
REVOKE some_privileges ON object_type object_name FROM role_name  [ WITH GRANT OPTION ];

--指定某类所有对象授权语句一般格式(不同类型略有不同)
GRANT some_privileges ON ALL 类型(复数) IN object_type object_name TO role_name  [ WITH GRANT OPTION ];
REVOKE some_privileges ON ALL 类型(复数) IN object_type object_name FROM role_name  [ WITH GRANT OPTION ];

其中some_privileges可以为:
   SELECT
   INSERT
   UPDATE
   DELETE
   TRUNCATE
   REFERENCES
   TRIGGER
   CREATE
   CONNECT
   TEMPORARY或TEMP
   EXECUTE
   USAGE
   ALL全部

其中role_name除了可为具体用户名/角色名外,还可以为PUBLIC表示所有用户

grant ALL on DATABASE 数据库 to role_name不会自动把该数据库中schema、Table等对象授权给role_name

  查看权限

查看用户/角色权限(创建语句中option指定的权限):

--可用以下语句查询或使用\du+
SELECT * FROM pg_roles;

查看用户/角色对象权限(GRANT赋予的权限): 

SELECT owner
      ,relname as object_name,grantor,grantee
      ,CASE
         WHEN (t.privilege = 'r'::text) THEN 'SELECT'::text
         WHEN (t.privilege = 'a'::text) THEN 'INSERT'::text
         WHEN (t.privilege = 'd'::text) THEN 'DELETE'::text
         WHEN (t.privilege = 'w'::text) THEN 'UPDATE'::text
         WHEN (t.privilege = 'D'::text) THEN 'TRUNCATE'::text
         WHEN (t.privilege = 'X'::text) THEN 'EXECUTE'::text
         WHEN (t.privilege = 'x'::text) THEN 'REFERENCES'::text
         WHEN (t.privilege = 'U'::text) THEN 'USAGE'::text
         WHEN (t.privilege = 't'::text) THEN 'TRIGGER'::text
         WHEN (t.privilege = 'C'::text) THEN 'CREATE'::text
         WHEN (t.privilege = 'c'::text) THEN 'CONNECT'::text
         WHEN (t.privilege = 'T'::text) THEN 'TEMPORARY'::text
         ELSE t.privilege
        END AS privilege
  FROM (select CASE 
                 WHEN grantee IS NOT NULL AND grantee!=''
                   THEN has_table_privilege(grantee, oid, 'TRUNCATE')
                 ELSE NULL
               END AS TRUNCATE_privs
              ,regexp_split_to_table(privs, ''::text) AS privilege
              ,t_cls.* 
          from (select (regexp_split_to_array(unnest(relacl)::text,'=|/'))[1] as grantee
                      ,(regexp_split_to_array(unnest(relacl)::text,'=|/'))[2] as privs
                      ,(regexp_split_to_array(unnest(relacl)::text,'=|/'))[3] as grantor
                      ,relname
                      ,relacl
                      ,(select usename from pg_user where usesysid = c.relowner) as owner
                      ,(SELECT nspname FROM pg_namespace n WHERE n.oid = c.relnamespace) as nspname
                      ,c.oid
                  FROM pg_class c
                 WHERE 1=1 
                   AND relkind in ('r', 'S', 't', 'p','P')
                 order by owner,relname
        ) t_cls
      ) t;

查看某个表上哪些用户拥有什么权限: 

SELECT * FROM information_schema.table_privileges 
WHERE table_name = 'your_table_name';

查看schema能被哪些访问:  

\d+

其中UC字母分别表示:Usage、Create权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1693695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CTF Web】CTFShow web6 Writeup(SQL注入+PHP+位运算)

web6 1 阿呆一口老血差点噎死自己&#xff0c;决定杠上了 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\|select/i"…

【游戏引擎】Unity动画系统详解

持续更新。。。。。。。。。。。。。。。 【游戏引擎】Unity动画系统详解 Unity动画系统详解简介关键帧动画创建关键帧动画的步骤&#xff1a; Mecanim动画系统Mecanim的关键组件&#xff1a;使用Mecanim创建动画的步骤&#xff1a; 动画控制器动画控制器的高级功能&#xff1a…

[算法][前缀和] [leetcode]724. 寻找数组的中心下标

题目地址 https://leetcode.cn/problems/find-pivot-index/description/ 题目描述 代码 class Solution {public int pivotIndex(int[] nums) {int total Arrays.stream(nums).sum();//前缀和int prefixSum 0;int len nums.length;for(int i 0;i<len;i){if (i-1>0){p…

大数据之Hive函数大全

&#x1f527; Hive函数大全 更多大数据学习资料请关注公众号“大数据领航员"免费领取 一、数学函数 1、取整函数: round 1.函数描述 返回值语法结构功能描述doubleround(double a)返回double类型的整数值部分&#xff08;遵循四舍五入&#xff09; 2.例程 hive>…

图_基础算法

图这种数据结构还有一些比较特殊的算法&#xff0c;比如二分图判断&#xff0c;有环图无环图的判断&#xff0c;拓扑排序&#xff0c;以及最经典的最小生成树&#xff0c;单源最短路径问题&#xff0c;更难的就是类似网络流这样的问题。 先看拓扑排序&#xff08;有环无环&…

[DDR5 Jedec 3]DDR5 SDRAM 状态图 和 基本功能

3000字, 依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解DDR》 3.1 简化状态图 来源: Jedec Proposed DDR5 Full spec 缩写功能ACT激活PRE预充电PRE_A全部预充电MRS寄存器集模式REF刷新TEN边界扫描模式ReadRD, RDS4, RDS8Read ARDA, RDS4A, RDS8AwriteWR, WRS4…

配置docker阿里云镜像地址

一、安装docker的步骤&#xff1a; 1.yum install -y yum-utils 2.yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo --配置阿里云仓库3.yum makecache fast4.yum install docker-ce -y5.docker version …

动态代理,反射,注解的复习笔记

1.动态代理的作用 动态代理最主要的用途就是在各种框架中&#xff0c;很方便的在运行期间生成代理类&#xff0c;通过代理类就可以完成AOP、过滤器、拦截器等操作 &#xff08;注&#xff1a;代理就是被代理者没有能力或者不愿意去完成某件事情&#xff0c;需要找个人代替自己…

IDEA 将多个微服务Springboot项目Application启动类添加到services标签,统一启动、关闭服务

IDEA 将多个微服务Springboot项目Application启动类添加到services标签&#xff0c;统一启动、关闭服务 首先在Views > Tool Windows > Services 添加services窗口 点击services窗口&#xff0c;首次需要添加配置类型&#xff0c;我们选择Springboot 默认按照运行状态分…

Apache Hive 安装与配置的详细教程

1. Hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xff0c;并提供SQL查询功能&#xff0c;能…

【QGIS入门实战精品教程】5.3:CGCS2000转Lambert投影

参考阅读: 【GlobalMapper精品教程】081:WGS84/CGCS2000转Lambert投影 文章目录 一、加载实验数据二、投影转换三、批量投影转换一、加载实验数据 加载配套实验数据,如下图所示:图层为长沙市范围、长沙市酒店宾馆分布点位、湖南省酒店分布点位矢量数据。 双击图层,打开信…

Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现

目录 一、用Springboot读取本地工作目录的文件和文件结构 1.1、需求介绍 1.2、后端传递数据 1.2.1、语言框架 1.2.2、本地工作目录示范 1.2.3、后端代码 ①controller层 ②service层 ③响应的数据 二、总结 一、用Springboot读取本地工作目录的文件和文件结构 1.1、…

5.23.12 计算机视觉的 Inception 架构

1. 介绍 分类性能的提升往往会转化为各种应用领域中显着的质量提升&#xff0c;深度卷积架构的架构改进可用于提高大多数其他计算机视觉任务的性能&#xff0c;这些任务越来越依赖于高质量的学习视觉特征。在 AlexNet 功能无法与手工设计、制作的解决方案竞争的情况下&#xf…

Spring框架学习笔记(四):手动实现 Spring 底层机制(初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP)

1 Spring 整体架构示意图 2 阶段 1 -- 编写自己的 Spring 容器&#xff0c;实现多层扫描包 编写自己的 Spring 容器&#xff0c;实现多层扫描包&#xff0c;排除包下不是bean的&#xff0c; 得到 bean 对象&#xff0c;放入到临时ioc容器中 代码实现&#xff1a; &#xff0…

闲鱼电商运营高级课程,一部手机学会闲鱼开店赚钱(34节课)

课程目录 1&#xff0c;闲鱼更货出售主要核心原理.mp4 2、闲鱼前期开店准备.mp4 3.账号基础信息设置1.mp4 4、提升账号权重.mp4 5、注意避免违规行为.mp4 6、实接课 应该怎么选择爆款产品.mp4 7、分析商品的闲鱼市场.mp4 8、寻找最低价货源.mp4 9、怎么寻我优质的货源…

把自己的垃圾代码发布到官方中央仓库

参考博客&#xff1a;将组件发布到maven中央仓库-CSDN博客 感谢这位博主。但是他的步骤有漏缺&#xff0c;相对进行补充 访问管理页面 网址&#xff1a;Maven Central 新注册账号&#xff0c;或者使用github快捷登录&#xff0c;建议使用github快捷登录 添加命名空间 注意&…

【会议征稿,IEEE出版】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024,6月28-30)

第九届信息科学、计算机技术与交通运输国际学术会议&#xff08;ISCTT 2024&#xff09;将于2024年6月28-30日在中国绵阳举行。 ISCTT 2024将围绕 “信息科学”、"计算机技术”、“交通运输” 等最新研究领域&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专…

【idea】idea2024最新版本下载_安装_破解

1、下载 下载地址&#xff1a;下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 下载完成&#xff1a; idea破解脚本下载链接&#xff1a;https://pan.baidu.com/s/1L5qq26cRABw8XuEn_CngKQ 提取码&#xff1a;6666 下载完成&#xff1a; 2、安装 1、双击idea的安装包&…

MGR集群从库出现RECOVERING

一、MGR集群问题 说明&#xff1a; 1、启动MGR集群&#xff0c;发现从库转态是&#xff1a;RECOVERING&#xff0c;导致数据不同步。 2、查看MGR日志报错信息&#xff0c;发现提示从库以存在数据库linux&#xff0c;导致无法创建。 3、报错信息如下图所示&#xff1a; 二、解决…

数组-在两个长度相等的有序数组中找到上中位数

题目描述 解题思路 此题目直接遍历两个列表&#xff0c;时间复杂度为O(n)&#xff1b;使用二分法去比较两个递增列表的中位数&#xff0c;缩小两个数组中位数范围&#xff0c;时间复杂度O(logn)&#xff0c;这里我们的算法实现使用二分法。 通过举例子来说明解题算法&#xf…