postgresql用户和角色
postgresql用户和角色
- 简述
- 创建角色
- 角色属性
- 登录特权
- 超级用户
- 创建数据库
- 创建角色
- 启动复制
- 密码
- 修改角色属性
- 对象授权
- 撤销授权
- 组和成员
- 删除角色
简述
PostgreSQL 通过角色的概念来控制数据库的访问权限。角色又包含了两种概念,具有登录
权限的角色称为用户,包含其他成员(也是角色)的角色称为组(group)。因此,一个角色可
以是一个用户,也可以是一个组,或者两者都是。
角色可以拥有数据库对象(例如表和函数),并且可以将这些对象上的权限授予其他角色,
从而控制对象的访问。此外,一个组中的成员可以拥有该组所拥有的权限
创建角色
在 PostgreSQL
中,使用 create role
语句创建角色:
-- 创建角色 name
-- name 指定了要创建的角色名称
create role name;
-- 显示当前数据库集群中已有的角色,可以查询系统目录 pg_roles:
-- 系统默认提供的角色名称,用于提供针对一些特定的常用特权和信息的访问权限
select rolname from pg_roles;
其中的 postgres
是系统初始化数据库时创建的默认角色,它是一个超级用户
默认角色包含的具体权限
角色属性
角色可以拥有属性,属性确定了角色拥有的特权,并且在登录时与客户端认证系统进行交互。
常见的角色属性包括
登录特权
-- 具有 login 属性的角色才能连接数据库。具有 login 角色的用户可以被看作一个"数据库用户"
create role name LOGIN;
-- 默认包含LOGIN权限,而 CREATE ROLE 没有
create user name;
超级用户
/*,数据的超级用户可以避开所有的权限检查,只验证登录权限。因此,这是一
个很危险的特权,使用时需要特别小心;最好在日常的操作中避免使用超级用户。
只有超级用户才能创建其他的超级用户。
*/
create role name SUPERUSER;
创建数据库
--只有明确授权的角色才能够创建数据库(超级用户除外,因为他们可以避开权限检查
create role name CREATEDB;
创建角色
--只有明确授权的角色才能够创建其他角色(超级用户除外,因为他们可以避开权限检查
--具有 CREATEROLE 特权的角色还可以修改或删除其他角色,以及为这些角色授予或者
--撤销成员角色。但是,针对超级用户的创建、修改、删除,以及它的成员变更,需要超
--级用户特权;CREATEROLE 特权无法针对超级用户执行这些操作
create role name CREATEROLE;
启动复制
--只有明确授权的角色才能够启动流复制(超级用户除外,因为他们可以避开权限检查)。用于流复制的角色还需要拥有 LOGIN 特权
create role name REPLICATION LOGIN;
密码
-- 只有当用户连接数据库使用的客户端认证方法要求提供密码时,密码属性才有意义
-- password 和 md5 认证方法需要使用密码。数据库的密码与操作系统的密码相互独立
-- 创建角色的同时,同时指定角色密码
create role name password '123456';
--在创建角色时,可以根据需要指定某些属性
create role tony with LOGIN password 'Pass2022' valid until '2025-01-01';
-- 创建一个管理角色 admin,它具有创建数据库和创建角色的特权
--最好创建一个拥有 CREATEDB 和 CREATEROLE 特权,但不具有超级用户特权
--的管理角色,然后使用该角色执行日常的数据库和角色的管理。这种方式可以避免过度使用超级
--用户可能带来的风险
create role admin CREATEDB CREATEROLE;
修改角色属性
alter role admin NOCREATEROLE;
对象授权
PostgreSQL 使 GRANT 语句进行数据库对象的授权操作。以表为例,基本的授权语法如下
grant privilege_list | ALLon [ table ] table_nameto role_name;
privilege_list 权限列表可以是 SELECT、INSERT、UPDATE、DELETE、TRUNCATE
等,ALL 表示表上的所有权限
--将 employees、departments 和 jobs 表上的增删改查权限授予了 tony 用户
-- 此时 tony用户就可以访问这些表中的数据grant select, insert, update, deleteon employees, departments, jobs to tony;
对表进行授权的 GRANT 语句还支持一些其他选项:
GRANT privilege_list | ALLON ALL TABLES IN SCHEMA schema_nameTO role_name;
ALL TABLES IN SCHEMA 表示某个模式中的所有表,可以方便批量授权操作。例如:
--该语句将 public 模式中所有表的查询权限授予 tony 用户。
grant select
on all tables in schema public
to tony;
也可以在 GRANT 语句的最后指定一个 WITH GRANT OPTION,意味着被授权的角色
可以将该权限授权其他角色
-- tony 用户不但拥有这些表上的访问权限,还可以将这些权限授予其他角色
GRANT SELECT, INSERT, UPDATE, delete
ON employees, departments, jobs
TO tony WITH GRANT OPTION;
除了授权表的访问权限之外,GRANT 语句还支持字段、视图、序列、数据库、函数、过程、
模式等对象的授权操作。授权操作的语句基本都类似
官网介绍
撤销授权
PostgreSQL 使 REVOKE 语句撤销数据库对象上的权限。同样以表为例,基本的撤销授权语句如下:
REVOKE privilege_list | ALLON TABLE table_nameFROM role_name;
--其中的参数和 grant 语句一致。例如:
revoke select, insert, update, delete
on employees, departments, jobs
from tony;
REVOKE 语句也支持对某个模式中的所有对象进行操作:
REVOKE privilege_list | ALLON ALL TABLES IN SCHEMA schema_nameFROM role_name;
撤销了用户 tony 在 public 模式中所有表上的查询权限
revoke select
on all tables in schema public
from tony;
与 GRANT 语句对应,REVOKE 语句还支持字段、视图、序列、数据库、函数、过程、模
式等对象的撤销授权操作。官网介绍
组和成员
在现实的环境中,管理员通常需要管理大量的用户和对象权限。为了便于权限管理,减少复
杂度,可以将用户进行分组,然后以组为单位进行权限的授予和撤销操作。
为此,PostgreSQL 引入了组(group)角色的概念。具体来说,就是创建一个代表组的角色,
然后将该组的成员资格授予其他用户,让其成为该组的成员。
--使用以下创建一个组角色
create role group_name;
按照习惯,组角色通常不具有 LOGIN 特权,也就是不能作为一个用户登录
--创建一个组 managers
create role managers;
--使用与对象授权操作相同的 grant 和 revoke 语句为组添加和删除成员:
-- managers组添加用户tony
grant managers to tony
--PostgreSQL 不允许设置循环的成员关系,也就是两个角色互相为对方的成员GRANT tony TO managers;
不能将特殊角色 PUBLIC 设置为任何组的成员
组角色中的成员可以通过以下方式使用该组拥有的特权:
- 首先,组中的成员可以通过 SET ROLE 命令将自己的角色临时性“变成”该组角色。此时,
当前数据库会话拥有该组角色的权限,而不是登录用户的权限;并且会话创建的任何数
据库对象归组角色所有,而不是登录用户所有。 - 其次,对于具有 INHERIT 属性的角色,将会自动继承它所属的组的全部特权,包括这些
组通过继承获得的特权
CREATE ROLE user1 LOGIN INHERIT;
CREATE ROLE net_admins NOINHERIT;
CREATE ROLE sys_admins NOINHERIT;
GRANT net_admins TO user1;
GRANT sys_admins TO net_admins;
使用角色 user1 登录之后,数据库会话将会拥有 user1 自身的特权和 net_admins 所有的特权,
因为 user1“继承”了 net_admins 的特权。但是,会话还不具有 sys_admins 所有的特权,因为即使
user1 间接地成为了 sys_admins 的成员,通过 net_admins 获得的成员资格具有 NOINHERIT 属性,
也就不会自动继承权限。
删除角色
-- drop role 角色名称;
DROP ROLE name;
如果删除的是组角色,该组中的成员关系会自动从组中删除,但是这些成员角色自身不会受
到任何影响
由于角色可以拥有数据库中的对象,也可以拥有访问其他对象的权限,删除角色通常不仅仅
只是一个简单的 DROP ROLE 语句。在删除角色之前,需要删除它所拥有的对象,或者将这些对
象重新赋予其他的角色;同时还需要撤销授予该角色的权限。详细信息可以参考官方文档
相关文章:
postgresql用户和角色
postgresql用户和角色 简述创建角色角色属性登录特权超级用户创建数据库创建角色启动复制密码修改角色属性 对象授权撤销授权组和成员删除角色 简述 PostgreSQL 通过角色的概念来控制数据库的访问权限。角色又包含了两种概念,具有登录 权限的角色称为用户ÿ…...
设计模式之备忘录模式
文章目录 游戏角色状态恢复问题传统方案解决游戏角色恢复传统的方式的问题分析备忘录模式基本介绍游戏角色恢复状态实例备忘录模式的注意事项和细节 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大…...
大数据Flink(八十八):Interval Join(时间区间 Join)
文章目录 Interval Join(时间区间 Join) Interval Join(时间区间 Join) Interval Join 定义(支持 Batch\Streaming):Interval Join 在离线的概念中是没有的。Interval Join 可以让一条流去 Jo…...
数字IC笔试千题解--判断题篇(五)
前言 出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的。 所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料…...
Kubernetes(k8s)上搭建一主两从的mysql8集群
Kubernetes上搭建一主两从的mysql8集群 环境准备搭建nfs服务器安装NFS暴露nfs目录开启nfs服务器 安装MySQL集群创建命名空间创建MySQL密码的Secret安装MySQL主节点创建pv和pvc主节点的配置文件部署mysql主节点 安装第一个MySQL Slave节点创建pv和pvc第一个从节点配置文件部署my…...
MySQL备份与恢复
MySQL备份与恢复一、备份1、数据备份的重要性2、数据备份分类2.1 物理备份2.2 逻辑备份 3、数据库备份策略4、常用的备份方法和工具5、数据库上云迁移 二、数据库完全备份1、简介2、物理冷备份与恢复2.1 物理冷备份2.2 备份恢复2.3 补充知识date 3、mysqldump备份与恢复3.1 完全…...
【RTOS学习】单片机中的C语言
🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 本喵默认各位小伙伴都会C语言,我们平时学习C语言都是在Windows环境下学习的࿰…...
确知波束形成matlab仿真
阵列信号处理中的导向矢量 假设一均匀线性阵列,有N个阵元组成,满足:远场、窄带假设。 图1. 均匀线性阵模型 假设信源发射信号,来波方向为 θ \theta θ,第一个阵元接收到的信号为 x ( t ) x(t) x(t),则第…...
并发编程相关面试题
线程基础 线程和进程的区别: ----------------------------------------------------------------------- 创建线程的方式: 1 继承Thread类 2 实现runnable接口 3 实现callable 接口(有返回值的) 4 线程池创建线程 ------…...
Cpp/Qt-day050921Qt
目录 实现使用数据库的登录注册功能 头文件: registrwidget.h: widget.h: 源文件: registrwidget.c: widget.h: 效果图: 思维导图 实现使用数据库的登录注册功能 头文件: registrwidget.h: #ifndef REGISTRWIDGET_H #de…...
视频汇聚/视频云存储/视频监控管理平台EasyCVR分发rtsp流起播慢优化步骤详解
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
ElementUI之登陆+注册->饿了吗完成用户登录界面搭建,axios之get请求,axios之post请求,跨域,注册界面
饿了吗完成用户注册登录界面搭建axios之get请求axios之post请求跨域 1.饿了吗完成用户注册登录界面搭建 将端口号8080改为8081 导入依赖,在项目根目录使用命令npm install element-ui -S,添加Element-UI模块 -g:将依赖下载node_glodal全局依…...
2023华为杯研究生数学建模研赛E题出血脑卒中完整论文(含28个详细预处理数据及结果表格)
大家好呀,从发布赛题一直到现在,总算完成了全国研究生数学建模竞赛(数模研赛)E题完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。…...
Java中的继承是什么?
在Java中,继承是一种面向对象编程的概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。通过继承,子类可以获得父类的属性和方法,并且可以添加自己的特…...
Python - flask后端开发笔记
Flask入门 有一篇很全面的博客可以参考:Python Flask Web 框架入门 跨域问题处理 from flask_cors import CORS CORS(app,supports_credentialsTrue,origins[url], # 前端url列表 ) 文件发送 from flask import send_from_directory app.route(/download) …...
Flutter实现PS钢笔工具,实现高精度抠图的效果。
演示: 代码: import dart:ui;import package:flutter/material.dart hide Image; import package:flutter/services.dart; import package:flutter_screenutil/flutter_screenutil.dart; import package:kq_flutter_widgets/widgets/animate/stack.dart…...
苏宁滑块验证
网址:https://passport.suning.com/ids/login总结一下,别被他的表面现象给骗了,这玩意儿,个人认为,腾讯的都没法跟他比!!! 难点:动态混淆,vmp,图片…...
c语言。。。
gcc thread.c -lpthread -o app -fexec-charsetgbkthread.c为当前目录下编写的c代码 代码中引入了<pthread.h>线程库,所以要加上-lpthread -o app 输出.exe的c可执行文件,文件名为app -fexec-charsetgbk 设置编码方式,防止控制台输出中…...
vue-cli创建项目、vue项目目录结(运行vue项目)、ES6导入导出语法、vue项目编写规范
vue-cli创建项目、vue项目目录结构、 ES6导入导出语法、vue项目编写规范 1 vue-cli创建项目 1.1 vue-cli 命令行创建项目 1.2 使用vue-cli-ui创建 2 vue项目目录结构 2.1 运行vue项目 2.2 vue项目的目录结构 3 es6导入导出语法 4 vue项目编写规范 4.1 修改项目 4.2 以后…...
QT读取DLL加载算法
有这样一个场景,我有一个GUI软件,把他想象成PS软件,集成了很多工具。现在我要添加新算法(PS工具),该怎么办? 有三种办法: 第一种我把新算法代码加到项目中,编译整个项目。 第二种,新…...
HTTPX-用于Python的下一代HTTP客户端
1、前言 在使用 Python 进行接口自动化时,大多数都会使用 requests 模块,requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。 本篇将介绍 Python 的下一代 HTTP 客户端 - HTTPX 2、简介 HTT…...
[LLM+AIGC] 01.应用篇之中文ChatGPT初探及利用ChatGPT润色论文对比浅析(文心一言 | 讯飞星火)
近年来,人工智能技术火热发展,尤其是OpenAI在2022年11月30日发布ChatGPT聊天机器人程序,其使用了Transformer神经网络架构(GPT-3.5),能够基于在预训练阶段所见的模式、统计规律和知识来生成回答,…...
OCR -- 文本检测
目标检测: 不仅要解决定位问题,还要解决目标分类问题,给定图像或者视频,找出目标的位置(box),并给出目标的类别; 文本检测: 给定输入图像或者视频,找出文本的…...
【系统架构】软件可靠性基础知识
导读:本文整理关于软件可靠性基础知识构建系统架构知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑,基于大量项目实践经验基础上,不断加深理论体系的理解,从而能够创造新解决系统相关问题。 目录 1、软件可靠性…...
相机Camera
Camera需与SurfaceView配合使用 Camera类常用方法: Camera.open() 创建Camera实例,打开相机 getParameters() 获取相机参数 release() 释放相机资源 setParameters(Camera.Parameters parameters) 设置相机参数 setPreviewDisplay(SurfaceHolder holde…...
洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题
【题目来源】https://www.luogu.com.cn/problem/P8815https://www.acwing.com/problem/content/4733/【题目描述】 逻辑表达式是计算机科学中的重要概念和工具,包含逻辑值、逻辑运算、逻辑运算优先级等内容。 在一个逻辑表达式中,元素的值只有两种可能&a…...
ElementUI实现登录注册+axios全局配置+CORS跨域
一、搭建项目 1.1 安装 Element-UI 先确保是否安装了vue-cli脚手架工具 !!! 安装vue脚手架可以看看我的上一篇博客 构建好项目后通过npm安装element-ui cd 项目根路径 #进入新建项目的根目录 npm install element-ui -S #安装…...
Vue 07 Vue中的数据代理
通过数据代理,我可以方便的使用vm.属性,修改data中的属性 什么是数据代理 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) 我们修改obj2的x属性,其实修改的是obj的x属性 <!DOCTYPE html&…...
Foxit PDF SDK Windows 9.1 Crack
Foxit PDF SDK 变更日志 Windows/Linux/Mac 2023 年 8 月 新功能/增强功能 在开始签名之前设置外观。支持使用共享字典添加签名。允许在调用 Signature::StartSign() 之前增量保存文档。在签名前修改现有未签名分页印章签名的外观。支持使用共享字典添加分页签名。忽略全角…...
UG NX二次开发(C++)-采用NXOpen方法计算体的质心
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、创建一个part文件3、测量质心的NXOpen方法3.1 方法说明3.2 质心测量的代码3.3 测试结果1、前言 在UG NX二次开发过程中,测量是一个很必要的功能,比如测量距离、角度、面的体积、边长、…...
蛋糕网站设计/百度seo找哪里
传送门...
网站产品介绍长图哪个软件做的/网站友情链接自动上链
题目大意是有一堆猴子,然后每个猴子都有自己喜欢的香蕉类型,然后香蕉会在指定的位置,问每个猴子能不能在每个地方吃到自己喜欢的香蕉。 其实直接暴力即可(因为最大最大最大是50) 上代码: 1 #include<stdio.h> 2…...
有域名和虚拟服务器后怎么做网站/seo课程多少钱
在linux mint上使用shutter,可以通过快捷键提高使用舒适度 1.找到“键盘”,设置应用程序和快捷键 2.设置应用程序快捷键为ctrlalta 在需要截图的时候,调用快捷键即可 在shutter的“编辑–> 首选项” 中可以设置保存路径、行为等...
网站怎么做qq登录/企点客服
【kindle笔记】读书记录-总 2017-12-26 《犬夜叉》 买kindle的初衷是看计算机工具书看得眼快瞎了,我弟弟推荐给我的Linux系列《鸟叔私房菜》 真的是深思熟虑并且最终陷入一种不买不休的状态之后……买了。在亚马逊官网上。 万万没想到的是,我的第一台啃豆…...
avada主题做网站/seo学院
楷书,又名正书、真书,是由隶书发展演变而来的一种端庄、工整的字体。“楷”有楷模、法式之意。“正”有各种字体中的正宗之说。楷书萌芽于后汉,从魏晋南北朝开始取代隶书而成为通用的字体,沿用至今。楷书结体方正,笔姿…...