PostgreSQL——用户管理

PostgreSQL用户管理

  • 一、组角色管理
    • 1.1、创建组角色
    • 1.2、查看和修改组角色
    • 1.3、删除组角色
  • 二、角色的各种权限
    • 2.1、LOGIN(登录)
    • 2.2、SUPERUSER(超级用户)
    • 3.3、CREATEDB(创建数据库)
    • 3.4、CREATEROLE(创建角色)
    • 3.5、口令
  • 三、账户管理
    • 3.1、创建用户
    • 3.2、删除用户
    • 3.3、修改用户密码
  • 四、组角色和用户权限管理
    • 4.1、对组角色授权
    • 4.2、对用户授权
    • 4.3、收回组角色权限
    • 4.4、收回用户权限
  • 五、数据库权限管理
    • 5.1、修改数据库的拥有者
    • 5.2、增加用户的数据表权限
    • 5.3、删除用户的数据表权限
  • 六、案例

一、组角色管理

1.1、创建组角色

一个组角色可以看作是一组数据库用户。组角色可以拥有数据库对象(比如表),以及可以把这些对象上的权限赋予其他角色,以控制谁拥有访问哪些对象的权限。

-- 语法
CREATE ROLE name;
-- name为组角色名称
-- 创建一个名称为post2的组角色
create role post2;

在这里插入图片描述

1.2、查看和修改组角色

角色存储在pg_roles系统表中,用户可以通过查看此表来查看系统中的角色。

-- 查看系统中的组角色
select rolname from pg_roles;

在这里插入图片描述

修改组角色的名称,SQL语法格式如下:

ALTER ROLE 组角色名称 RENAME TO 新的组角色名称
-- 修改组角色post2的名称为post3
alter role post2 rename to post3

在这里插入图片描述

1.3、删除组角色

-- 语法
DROP ROLE 组角色的名称
-- 删除组角色post3
drop role post3;

二、角色的各种权限

一个数据库角色可以有一系列属性,这些属性定义它的权限,以及与客户认证系统的交互。常见的权限如下。

2.1、LOGIN(登录)

默认情况下,创建的组角色没有登录权限。只有具有LOGN权限的组角色才可以用作数据库连接的初始角色名。一旦组角色拥有了登录权限,即可当作用户名一样来使用。

创建具有登录权限的组角色,SQL语法如下:

CREATE ROLE name LOGIN;
-- 创建组角色post4,此组角色具有登录权限
create role post4 login;

在这里插入图片描述

2.2、SUPERUSER(超级用户)

SUPERUSER拥有对数据库操作的最高权限,可以完成对数据库的所有权限检查。为了保证PostgreSQL的安全,建议用户谨慎使用SUPERUSER,不要轻易创建它,最好使用非超级用户完成用户的大多数工作。

创建数据库超级用户,SQL语法如下:

CREATE ROLE name SUPERUSER;
-- 创建组角色post5,此组角色具有超级用户权限
create role post5 superuser;

在这里插入图片描述

只有超级用户才有权限创建超级用户

3.3、CREATEDB(创建数据库)

角色要想创建数据库,必须明确给出该权限。当然是除了超级用户以外,因为超级用户己经具有所有的权限。

创建具有创建数据库权限的组角色,SQL语法格式如下:

CREATE ROLE name CREATEDB;
-- 创建组角色post6,此组角色具有创建数据库的权限
create role post6 createdb;

在这里插入图片描述

3.4、CREATEROLE(创建角色)

角色要想创建角色,必须明确给出该权限(除了超级用户以外)。一旦角色具有CREATEROLE权限,即可更改和删除其他角色,还可以给其他角色赋予或者撤销成员关系。当然,如果想对超级用户进行操作,仅有此权限还不够,还必须拥有SUPERUSER权限。

创建具有创建角色权限的组角色,SQL语法格式如下:

CREATE ROLE name CREATEROLE;
-- 创建组角色post7,此组角色具有创建数据库的权限
create role post7 createrole;

在这里插入图片描述

3.5、口令

在客户认证方法要求与数据库建立连接时,需要口令权限。常见的认证方法包括passwordmd5crypt

创建具有口令权限的组角色,SQL语法格式如下:

CREATE ROLE name 口令认证方法 具体口令
-- 创建组角色post8,此组角色具有口令权限
create role post8 password '123456';

只有在必须使用口令的时候,口令才比较重要。另外数据库口令与操作系统口令是无关的。

三、账户管理

在PostgreSQL中可以管理用户账号,包括创建用户、删除用户、密码管理等内容。PostgreSQL数据库的安全性,需要通过账户管理来保证。

3.1、创建用户

用户是具有登录权限的组角色。

-- 创建普通用户的$QL语法如下:
CREATE USER name
-- 这和下面语句的作用是等价的:
CREATE ROLE name LOGIN
-- 创建用户名称为postgre02,并具有创建数据库和创建角色的权限,同时登录密码为'123456789'
create user postgre02 password '123456789' createdb createrole;

在这里插入图片描述

3.2、删除用户

要想别除用户,必须拥有CREATEROLE权限。删除用户的SQL语法如下:

DROP USER user [, user];
-- DROP USER语句用于删除一个或多个PostgreSQL账户。
-- 使用DROP USER删除账户postgre02
drop user postgre02;

3.3、修改用户密码

-- 使用SQL语句修改密码的语法格式如下:
ALTER USER 用户名 口令认证方式 新密码;
-- 将账户postgre(01的密码修改为123123',SQL语句如下:
ALTER USER postgre01 PASSWORD '123123';
-- 命令执行后,即可使用新密码登录PostgreSQL服务器。

四、组角色和用户权限管理

4.1、对组角色授权

-- 用户还可以使用ALTER ROLE对角色进行授权,语法格式如下
ALTER ROLE 角色名 权限1 权限2 ...;
-- 给post1角色添加创建数据表和创建角色的权限
alter role post1 createdb createrole;

4.2、对用户授权

-- 用户还可以使用ALTER USER对用户进行授权,语法格式如下:
ALTER USER 用户名 权限1 权限2 ...;
-- 给postgre01用户添加创建数据表和创建角色的权限
alter user postgre01 createdb createrole;

4.3、收回组角色权限

-- 将post1角色创建数据表和创建角色的权限收回
alter role post1 nocreatedb nocreaterole;

4.4、收回用户权限

-- 将postgre01用户创建数据表和创建角色的权限收回
alter user postgre01 nocreatedb nocreaterole;

五、数据库权限管理

数据库管理员要对所有用户的权限进行合理规划管理。数据库的操作权限主要包括SELECT、INSERT、UPDATE、DELETE、REFERENCES和TRIGGER等。PostgreSQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的各种权限。

5.1、修改数据库的拥有者

在创建对象的时候,它会被赋予一个拥有者。通常拥有者就是执行创建语句的角色,用户可以根据需要修改数据库的拥有者。

-- 语法
ALTER DATABASE 数据库名称 OWNER TO 拥有者名称;
-- 将mytest数据库的拥有者修改为postl
alter database mytest owner to post1;

5.2、增加用户的数据表权限

默认情况下,只有数据库的所有者可以对其中的数据表进行操作。要允许其他用户使用这个数据表,必须赋予相应的权限。

-- GRANT 权限 ON 数据表 TO 用户名称;
-- 其中,ppol是一个现有的数据表,postgres是一个现有的用户,允许postgres更新ppo1数据表,使用下面的语句更新表的权限:
grant update on ppo1 to postgres;
-- 如果将上面的语句修改为:
grant update on ppo1 to public;
-- 则表示将数据表pol的更新权限赋予系统中的所有角色。
-- 如果将上面的语句修改为:
grant all on ppo1 to postgres;
-- 则表示把适用于该对象的所有权限都赋予用户postgres。

5.3、删除用户的数据表权限

-- 语法
REVOKE 权限 ON 数据表 FROM [用户/角色]
-- 撤销用户对特定表的所有权限
REVOKE ALL PRIVILEGES ON TABLE table_name FROM username;-- 撤销特定权限(如 SELECT、INSERT 等)​​
REVOKE SELECT, INSERT ON TABLE table_name FROM username;-- 撤销用户对模式中所有表的权限​:
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name FROM username;-- 撤销用户对将来创建的表的默认权限
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name
REVOKE ALL PRIVILEGES ON TABLES FROM username;

六、案例

-- 创建一个数据库test01
create database test01;-- 选择test0l数据库为当前数据库。在该数据库下创建数据表mystudent
create table mystudent(numb varchar (30) not null,name varchar (20) not null,score int not null
);-- 创建一个新账户,用户名称为admin01,密码为'pw123'
create user admin01 password 'pw123';-- 创建一个新账户,用户名称为admin02,密码为'pw456'
create user admin02 password 'pw456';-- 将数据库test0l的所有者修改为admint01
alter database test01 owner to admin01;

在这里插入图片描述

-- 允许用户admin02可以对数据表mystudent进行查询、插入和更新操作
grant select, update, insert on mystudent to admin02;-- 别除admin02的账户信息
drop user admin02;

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

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

相关文章

东软8位MCU使用问题总结

简介用的单片机为ES7P7021,采用8位RISC内核,2KB的FLASH,128bit的RAM。编译器使用东软提供的iDesigner,开发过程中编译器和单片机有一些地方使用时需要注意下。1.RAMclear()函数注意问题/****************************************…

深度学习在订单簿分析与短期价格预测中的应用探索

一、订单簿数据特性及预处理 1.1 订单簿数据结构解析 在金融交易领域,订单簿是市场微观结构的集中体现,它记录了不同价格水平的买卖订单信息。一个典型的订单簿由多个层级组成,每个层级包含特定价格上的买单和卖单数量。例如,在某…

Hashmap源码

目录 HashMap底层原理 JDK1.8及以后底层结构为:数组链表红黑树 默认参数 扩容机制 数组 链表 红黑树 HashMap为什么用红黑树不用B树 HashMap什么时候扩容 HashMap的长度为什么是 2的 N 次方 HashMap底层原理 JDK1.8及以后底层结构为:数组链表红…

【JAVA 字符串常量池、new String的存储机制、==与equals的区别,以及字符串重新赋值时的指向变化】

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录代码原理解错误逻辑理解理解与修正&#xff1a…

博客项目 Spring + Redis + Mysql

基础模块1. 邮箱发送功能最初设计的接口 (雏形)public interface EmailService {/*** 发送验证码邮件** param email 目标邮箱* return 发送的code* throws RuntimeException 如果发送邮件失败,将抛出异常*/String sendVerificationCode(Stri…

前端处理导出PDF。Vue导出pdf

前言:该篇主要是解决一些简单的页面内容导出为PDF1.安装依赖使用到两个依赖,项目目录下运行这两个//页面转换成图片 npm install --save html2canvas //图片转换成pdf npm install jspdf --save 2.创建通用工具类exportPdf.js文件可以保存在工具类目录下…

【GM3568JHF】FPGA+ARM异构开发板烧录指南

1. Windows烧录说明 SDK 提供 Windows 烧写工具(工具版本需要 V3.31或以上),工具位于工程根目录: tools/ ├── windows/RKDevTool 如下图,编译生成相应的固件后,设备烧写需要进入 MASKROM 或 LOADER 烧写模式,准备…

C++ 多进程编程深度解析【C++进阶每日一学】

文章目录一、引言二、核心概念:进程 (Process)功能与作用三、C 多进程的实现方式四、核心函数详解1. fork() - 创建子进程函数原型功能说明返回值完整使用格式2. wait() 和 waitpid() - 等待子进程结束函数原型参数与返回值详解3. exec 系列函数 - 执行新程序函数族…

一周学会Matplotlib3 Python 数据可视化-绘制面积图(Area)

锋哥原创的Matplotlib3 Python数据可视化视频教程: 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib,学习Matplotlib图形参数基本设置&…

北京JAVA基础面试30天打卡11

1.索引创建注意事项 适合的场景 1.频繁使用where语句查询的字段 2.关联字段需要建立索 3.如果不创建索引,那么在连接的过程中,每个值都会进行一次全表扫描 4.分组和排序字段可以建立索引因为索引天生就是有序的,在分组和排序时优势不言而喻 5…

vscode无法检测到typescript环境解决办法

有一个vitereacttypescript项目,在工作电脑上一切正常。但是,在我家里的电脑运行,始终无法检测到typescript环境。即使出现错误的ts语法,也不会有报错提示,效果如下:我故意将一个string类型,传入…

【MCP开发】Nodejs+Typescript+pnpm+Studio搭建Mcp服务

MCP服务支持两种协议,Studio和SSE/HTTP,目前官方提供的SDK有各种语言。 开发方式有以下几种: 编程语言MCP命令协议发布方式PythonuvxSTUDIOpypiPython远程调用SSE服务器部署NodejspnpmSTUDIOpnpmNodejs远程调用SSE服务器部署… 一、初始化项…

vscode使用keil5出现变量跳转不了和搜索全局不了

vscode使用keil5出现变量跳转不了,或者未包含文件,或者未全局检索; 参考如下文章后还会出现; 为什么vscode搜索栏只搜索已经打开的文件_vscode全局搜索只能搜当前文件-CSDN博客 在机缘巧合之下发现如下解决方式: 下载…

命名空间——网络(net)

命名空间——网络(net) 一、网络命名空间:每个都是独立的“网络房间” 想象你的电脑是一栋大楼,每个网络命名空间就是大楼里的一个“独立房间”: 每个房间里有自己的“网线接口”(网卡)、“门牌…

一文读懂16英寸笔记本的实际尺寸与最佳应用场景

当您搜索"16寸笔记本电脑长宽"时,内心真正在问的是什么?是背包能否容纳?桌面空间是否足够?还是期待屏幕尺寸与便携性的完美平衡?这个看似简单的尺寸数字背后,凝结着计算机制造商对用户体验的深刻…

Android Studio中创建Git分支

做一些Android项目时,有时候想要做一些实验性的修改,这个实验可能需要很多步骤,所以不是一时半会能完成的,这就需要在实验的过程中不断修改代码,且要提交代码,方便回滚或比较差异,但是既然是实验…

内存可见性和伪共享问题

文章目录什么是内存可见性问题为什么会出现可见性问题解决可见性问题的方法1. 使用volatile关键字2. 使用synchronized3. 使用java.util.concurrent包下的原子类什么是伪共享问题CPU缓存行伪共享的危害解决伪共享的方法1. 缓存行填充2. 使用Contended注解(JDK 8&…

Spring MVC 九大组件源码深度剖析(三):ThemeResolver - 动态换肤的奥秘

文章目录一、主题机制的核心价值二、核心接口设计三、四大实现类源码解析1. FixedThemeResolver(固定主题策略)2. CookieThemeResolver(Cookie存储策略)3. SessionThemeResolver(Session存储策略)4. Abstra…

一、Docker本地安装

((这里引用知乎上大佬的说法:https://www.zhihu.com/question/48174633 服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署。 一、参考帖子 Ubuntu 的 |Docker 文档 【docker】ubuntu完全卸载docker及再次安装_ubuntu…

LeetCode 分类刷题:2962. 统计最大元素出现至少 K 次的子数组

题目给你一个整数数组 nums 和一个 正整数 k 。请你统计有多少满足 「 nums 中的 最大 元素」至少出现 k 次的子数组,并返回满足这一条件的子数组的数目。子数组是数组中的一个连续元素序列。示例 1:输入:nums [1,3,2,3,3], k 2 输出&#…