(七)PostgreSQL的用户管理

news2024/10/5 20:25:07

PostgreSQL的用户管理

1 创建用户(角色)

CREATE USER现在是CREATE ROLE的别名。唯一的区别是,当命令的拼写为CREATE USER时,默认情况下会使用LOGIN,而当命令拼写为CREATE ROLE时会使用NOLOGIN。
官方文档:
在这里插入图片描述

创建测试用户test1:使用create user方式

--可以看到create user 命令提示的是CREATE ROLE,并且默认带有login权限
postgres=# create user test1 with password 'Dameng123';
CREATE ROLE
postgres=# select * from pg_roles where rolname like 'test%';
 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig |  oid  
---------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
 test1   | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 16402
(1 row)
--test1用户可以正常登录postgres数据库
[pg16@test ~]$ psql -d postgres -U test1 -W
Password: 
psql (16.2)
Type "help" for help.

postgres=> \conninfo
You are connected to database "postgres" as user "test1" via socket in "/tmp" at port "5777".
postgres=> 

创建测试用户test2:使用create role方式

--创建test2角色,并带登录权限。
postgres=# create role test2 with login password 'Dameng123';
CREATE ROLE
postgres=# select * from pg_roles where rolname like 'test%';
 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig |  oid  
---------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
 test1   | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 16402
 test2   | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 16403
(2 rows)

postgres=# 
--test2用户(角色)可以正常登录postgres数据库
[pg16@test ~]$ psql -d postgres -U test2 -W
Password: 
psql (16.2)
Type "help" for help.

postgres=> \conninfo
You are connected to database "postgres" as user "test2" via socket in "/tmp" at port "5777".
postgres=> 

视图pg_roles可以查出当前所有的角色,以及一些属性。
在这里插入图片描述在这里插入图片描述

2 授权

当前状态:
已创建测试数据库white,并创建schema yewu1,yewu1有t1,t2两张表。

2.1 授权

测试1:将yewu1.t1 的select 权限授给test1
第一步:执行 grant select on yewu1.t1 to test1;

white=# grant select on yewu1.t1 to test1;
GRANT

第二步:test1用户执行查询,发现报错

white=> select * from yewu1.t1;
ERROR:  permission denied for schema yewu1
LINE 1: select * from yewu1.t1;

第三步:执行 grant usage on schema yewu1 to test1;

white=# grant usage on schema yewu1 to test1;
GRANT

第四步:test1用户再次执行查询,可以正常访问表yewu1.t1

white=> select * from yewu1.t1;
 id 
----
  1
(1 row)

postgresql相比其它数据库,多了要授予usage这个权限,不然对应的用户访问不了这个schema。也就是:
1、先授予使用模式的权限, usage
2、再授予对模式内对象的权限,insert\delete\update\select 等

2.2 查询用户(角色)的所有权限

可以通过查看视图information_schema.table_privileges 和 information_schema.role_table_grants 来确认用户(角色)有哪些表的权限。
视图information_schema.table_privileges:
在这里插入图片描述

视图information_schema.role_table_grants:
在这里插入图片描述

–登录对应的数据库,再查询。即可看到角色所拥有的权限。

white=# select * from information_schema.role_table_grants where grantee = 'test1';
 grantor  | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy 
----------+---------+---------------+--------------+------------+----------------+--------------+----------------
 postgres | test1   | white         | yewu1        | t1         | SELECT         | NO           | YES
(1 row)

white=# select * from information_schema.table_privileges where grantee = 'test1';
 grantor  | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy 
----------+---------+---------------+--------------+------------+----------------+--------------+----------------
 postgres | test1   | white         | yewu1        | t1         | SELECT         | NO           | YES

2.3 回收权限

语法和其它数据库相似,更详细的用法请查看官方文档。

white=# revoke select on yewu1.t1 from test1;
REVOKE
white=# revoke usage on schema yewu1 from test1;
REVOKE

--再查询权限。test1的select权限已被回收。
white=# select * from information_schema.table_privileges where grantee = 'test1';
 grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy 
---------+---------+---------------+--------------+------------+----------------+--------------+----------------
(0 rows)

white=# select * from information_schema.role_table_grants where grantee = 'test1';
 grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy 
---------+---------+---------------+--------------+------------+----------------+--------------+----------------
(0 rows)

3 删除用户

语法和其它数据库相似,更详细的用法请查看官方文档。

white=# drop role test1;
DROP ROLE
white=# \du
                             List of roles
 Role name |                         Attributes                         
-----------+------------------------------------------------------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS
 test2     | 

谨记:心存敬畏,行有所止。

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

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

相关文章

MyBatis-Spring整合

引入Spring之前需要了解mybatis-spring包中的一些重要类; http://www.mybatis.org/spring/zh/index.html 什么是 MyBatis-Spring? MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 知识基础 在开始使用 MyBatis-Spring 之前&#x…

如何编写易于访问的技术文档 - 最佳实践与示例

当你为项目或工具编写技术文档时,你会希望它易于访问。这意味着它将为全球网络上的多样化受众提供服务并可用。 网络无障碍旨在使任何人都能访问网络内容。设计师、开发人员和撰写人员有共同的无障碍最佳实践。本文将涵盖一些创建技术内容的最佳实践。 &#xff0…

编曲知识19:自动化处理 发送原理 混响 延迟

自动化处理 发送原理 混响 延迟小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_661a68eae4b023c0a96a8b36?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 自动化处理 自动化 鼠标挪动到轨道左下角打开自动化轨道 或右键轨道-左键单击…

力扣 | 24. 两两交换链表中的节点

两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 输入:head 1->2->3->4->5->NULL 输出:2->1-&g…

信号反射的几个重要体现及电路设计

本文要点: 1,介绍信号分列反射的具体表现; 2,结合具体电路分析。 信号沿传输线向前传播时,每时每刻都会感受到一个瞬态阻抗,这个阻抗可能是传输线本身的,也可能是中途或末端其他元件的。对于信…

HashMap扩容原理(带源码分析)

HashMap的扩容原理 1.扩容流程图 注:拆分链表的规则 这里拆分链表时的一个比较:e.hash & oldCap 0 意思是:某一个节点的hash值和老数组容量求&运算。如果等于0,当前元素在老数组中的位置就是在新数组中的位置。如果不等…

numpy学习笔记(3),数组连接

6. 连接数组 6.1. 连接数组, 6.2. 分割数组, 6.3. 算术运算, 6.4. 广播(重点) 6.1 连接数组 concatenatehstackvstack 6.1.1 使用concatenate函数 沿指定轴连接多个数组,语法格式如下: num…

最新版守约者二级域名分发系统

主要功能 二级域名管理: 我们的系统提供全面的二级域名管理服务,让您轻松管理和配置二级域名。 域名分发:利用我们先进的域名分发技术,您可以自动化地分配和管理域名,确保每个用户或客户都能及时获得所需的域名资源。…

串口RS485

1.原理 全双工:在同一时刻可以同时进行数据的接收和数据的发送,两者互不影响 半双工:在同一时刻只能进行数据的接收或者数据的发送,两者不能同时进行 差分信号幅值相同,相位相反,有更强的抗干扰能力。 干…

Java实现二叉树(下)

1.前言 http://t.csdnimg.cn/lO4S7 在前文我们已经简单的讲解了二叉树的基本概念,本文将讲解具体的实现 2.基本功能的实现 2.1获取树中节点个数 public int size(TreeNode root){if(rootnull){return 0;}int retsize(root.left)size(root.right)1;return ret;}p…

基于深度学习的花卉检测系统(含PyQt界面)

基于深度学习的花卉检测系统(含PyQt界面) 前言一、数据集1.1 数据集介绍1.2 数据预处理 二、模型搭建三、训练与测试3.1 模型训练3.2 模型测试 四、PyQt界面实现参考资料 前言 本项目是基于swin_transformer深度学习网络模型的花卉检测系统,…

正确使用@RequestMapping(包含属性详解)

目录 一、基本认知二、RequestMapping的基本使用三、深入学习RequestMapping1、RequestMapping的源码2、RequestMapping的属性2.1 path2.2 method2.3 params2.4 headers2.5 consumes2.6 produces2.7 name 一、基本认知 客户端发起Http请求,会提供一个URL [协议://域…

Unity 2D让相机跟随角色移动

相机跟随移动 最简单的方式通过插件Cinemachine 在窗口/包管理器选择全部找到Cinemachine,导入。然后在游戏对象/Cinemachine创建2D Camera。此时层级中创建一个2D相机。选中人物拖入检查器Follow。此时相机跟随人物移动。 修改相机视口距离 在检查器中Lens下调正…

单细胞RNA测序(scRNA-seq)构建人类参考基因组注释

细胞定量是scRNA-seq重要的分析步骤,主要是进行细胞与基因的定量, cell ranger将比对、质控、定量都封装了起来,使用起来也相当便捷。 单细胞RNA测序(scRNA-seq)基础知识可查看以下文章: 单细胞RNA测序(scRNA-seq)工作流程入门 单细胞RNA测序(scRNA-seq)细胞分离与…

logistic分叉图

MATLAB代码 % 初始化 r_min 2.5; % 参数r的起始值 r_max 4.0; % 参数r的结束值 r_step 0.001; % 参数r的步长 r_values r_min:r_step:r_max; % 参数r的范围% 分岔图数据初始化 num_iterations 1000; % 总迭代次数 num_last_points 100; % 用于绘图的最后的这些…

MySQL Innodb 中的排它锁、共享锁、意向锁、记录锁、间隙锁、临键锁、死锁讲解

一、MySQL 锁机制 MySQL作为流行的关系型数据库管理系统之一,在处理并发访问时,锁起着至关重要的作用。锁的使用可以确保数据的完整性,同时也是实现并发操作的必备工具。在MySQL Innodb 引擎中锁可以理解为两个方向的东西,一个是…

stm32移植嵌入式数据库FlashDB

本次实验的程序链接stm32f103FlashDB嵌入式数据库程序资源-CSDN文库 一、介绍 FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能…

白话微机:10.民风淳朴的MCS-51小镇(小镇方言:汇编)

1. 基本结构与周期 MCS-51系列单片机属于8位单片机用 8051单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可MCS-51单片机由CPU、存储器和I/O三部分组成CPU是指:运算器和控制器 “PC CPU 3BUS RAM I/O” 在执行指令过程中&#xff…

cdn加速与ssl加速

cdn CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。 简单的来说,就是把原服务器上数据复制到其他服务器上,用户访…