【PostgreSQL】系列之 一 用户创建和授权(三)

2023-08-02 19:27:59

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁

🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

目录

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁

一、PostgreSQL权限概述

1.1 初始角色

1.2 权限 - PRIVILEGES

1.3 权限的组成

1.4 特殊的权限

1、owner拥有特权

2、PUBLIC

1.5 授权 - GRANT

二、Schema创建和授权实操

三、重新为用户授权

四、查询schema是否存在

五、客户端鉴权

六、postgresql 执行sql文件


一、PostgreSQL权限概述


1.1 初始角色


数据库刚创建时,会自动创建一个超级用户的角色:postgres。任何操作都是从该用户开始的。

PostgreSQL权限管理详解_pgsql权限管理_zou8944的博客-CSDN博客(摘录博客)

1.2 权限 - PRIVILEGES


角色有了,决定角色能够执行哪些数据库操作,则需要权限进行管理。PG将权限分为了两部分。这里所说的权限,主要指第二部分

  • 能否登录、创建database、创建role,这类重要权限,在创建role时指定;在pg_roles表中可查看
  • 对数据库对象的各类操作的权限,通过GRANT手动授予;在information_schema.xxx_privileges表中可查看,比如information_schema.table_privileges

1.3 权限的组成


一个完整的权限描述:角色A对表table1具有SELECT权限,有三部分组成

  • 角色:A
  • 授权目标:table1
  • 权限:SELECT

1.4 特殊的权限


1、owner拥有特权

当一个数据库对象被创建后,它会被自动分配一个owner,一般来说是执行创建语句的那个角色。大多数情况下,owner及其成员能够对该对象做任何事,如果其他人想要操作它,则需要GRANT授权。

可修改owner,超级用户、对象原本的owner、owner的成员都能够调整对象的owner

alter table table_name owner to new_owner;

2、PUBLIC

PUBLIC并不是一个真正的角色,确切地说,它应该算一个关键字,当授权的目标是它时,表示:授予系统中的所有角色,包括今后定义的角色。

PUBLIC默认是拥有以下权限

  • 本地登录
  • 对public的USAGE权限
  • 对public的CREATE权限

字面意思理解,相当于将该权限公开。

1.5 授权 - GRANT


-- 授予权限
GRANT {权限} ON {授权目标} TO {被授权角色} [WITH GRANT OPTION]
-- 授予角色
GRATE {角色} TO {被授权角色} [WITH ADMIN OPTION] [GRANTED BY 角色]

ALL PRELEGES:它是针对一个授权目标的所有权限的总和。

WITH ADMIN OPTION:授权传递,被授权的角色,可以传递授权

#  授予用户 zhangsan 数据库 kangkang 的所有权限
grant all privileges on database kangkang to zhangsan;
#  授权当前database 的指定kangll_schema的所有表的只读权限给zhangsan 角色
grant select on all tables in schema kangll_schema to zhangsan;

如下查询结果表示:kangll_test 数据中 public 下 stu 表,kangll 用户拥有所有权限, zhang 用户拥有只读权限,都是 kangll 用户授予的。

我们换个数据库查询下,可以看到 Access privileges为空,表明:其owner对该表有完整的权限


二、Schema创建和授权实操


创建数据库 kangkang, 我使用 postgres用户 完成

CREATE DATABASE kangkang;

创建名为 zhangsan 的用户,请运行以下命令:

CREATE USER zhangsan WITH PASSWORD '123456';

-- 修改密码
alter user zhangsan with password 'password';

授予zhangsan用户 kangkang 数据库的所有权限

grant all privileges on database kangkang to zhangsan;

现在 使用zhangsan 用户登录数据库, 创建名为 kangll_schema 的 schema

CREATE SCHEMA kangll_schema;

## 删除可以执行如下命令
DROP SCHEMA kangll_schema;

执行结果:

授予名为 zhangsan 用户对名为 kangll_schema 的 schema 下表的所有操作权限

GRANT USAGE ON SCHEMA kangll_schema to zhangsan;
grant all privileges on all tables in schema kangll_schema to zhangsan;
grant all privileges on all sequences in schema kangll_schema to zhangsan;
grant select,insert,update,delete on all tables in schema kangll_schema to zhangsan;

授权完成

kangkang数据库中创建 stu 表

CREATE TABLE kangll_schema.stu(
  stu_id BIGINT NOT NULL,
  stu_name VARCHAR(255) NOT NULL);

# 插入数据
INSERT INTO kangll_schema.stu VALUES(1, 'kangll');

# 查询
SELECT * FROM kangll_schema.stu;

执行过程:

可以看到 zhangsan 用户对 stu 表拥有所有权限, 也可以看到 Access privileges为空

撤销 权限后 重新分配 只读权限, zhangsan 用户拥有只读权限,且权限是 zhangsan 用户授予的 ,可以看到 Access privileges 不为空 ,为zhangsan 用户的 “r” 权限。


三、重新为用户授权


-- 取消权限
REVOKE [GRANT OPTION FOR] {权限} ON {授权目标} FROM {被授权人} [CASCADE | RESTRICT]
-- 取消角色
REVOKE [ADMIN OPTION FOR] {角色} FROM {被授权角色} [CASCADE | RESTRICT]

示例:

-- 切换到doki_database下
\c kangkang
-- 收回用户在 kangll_schema 下所有表的所有权限
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA kangll_schema FROM zhangsan;

-- 为zhangsan 赋予kangkang 数据库下的查询权限
GRANT select ON all TABLES IN SCHEMA kangll_schema to zhangsan;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA kangll_schema TO zhangsan;

执行过程:


四、查询schema是否存在


查询 PostgreSQL 数据库中是否存在某个特定的 schema,可以使用以下 SQL 命令:

SELECT * FROM information_schema.schemata WHERE schema_name = 'kangll_schema';

查询可以看到 schema_name 和 对应schema的 所属者,如果查询结果为空则对应的schema 不存在。


五、客户端鉴权


角色创建后好,还需要确认pg_hba.conf 的配置, 如果没有配置并不能直接通过网络连接到PG服务端。一般我们都是在安装完数据库就需要配置。

vim  /var/lib/pgsql/15/data/pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
host    all             all             0.0.0.0/0               md5

配置文件说明:

TYPE

  • local:本地连接
  • host:使用TCP/IP连接

DATABASE 许连接的database

USER: 允许连接的角色

ADDRESS: 允许的客户端地址,0.0.0.0/0表示允许所以客户端连接

METHOD: 鉴权方式

  • trust:无条件允许连接
  • reject:无条件拒绝
  • password:要求客户端提供未加密的密码进行身份验证,密码在网络上以明文形式传输,如果使用SSL,可以加密传输
  • scram-sha-256:执行 SCRAM-SHA-256 身份验证,这是一种质询响应机制,这是目前最安全的方式,不过有的数据库客户端可能不支持。
  • md5:也是一种质询响应机制
  • peer:获取客户端操作系统的用户名,如果和请求连接的用户名一样。这只有在本地连接时才有用。
  • xxx:都是其它的鉴权方式,官网参考: PostgreSQL: Documentation: 15: 21.1. The pg_hba.conf File

六、postgresql 执行sql文件


# 切换到postgres用户
sudo -i -u postgres
psql -d testdb -U postgres -f  /opt/PostgreSQL/Ambari-DDL-Postgres-CREATE.sql

或者
sudo -u postgres psql -d kangkang  -U  postgres    -f  /opt/PostgreSQL/Ambari-DDL-Postgres-CREATE.sql

参考原文链接:PostgreSQL权限管理详解_pgsql权限管理_zou8944的博客-CSDN博客

更多推荐

JSON注解和异常处理的使用

一、JSON数据返回1.1.前言JSON是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON的常用场景包括:前后端分离的项目中,后端向前端传送数据时。Ajax异步访问数据。RPC远程调用。除了JSON,还有其他的数据传输格式,如XML等。但是由于XML格式的特点,它在Web开发中使用较少。1.

【K8S系列】深入解析k8s网络插件—Canal

序言做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。文章标记颜色说明:黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点在现代容器化应用程序的世界中,容器编排平台Kubernetes已经成为标准。Kubernetes是一个分布式系统,为了支持复杂的应用和微服务架构,网络是Kuberne

汽车充电桩浪涌保护器的应用方案和作用

随着电动汽车的普及,充电桩的建设也越来越多,但是充电桩也面临着雷电等自然灾害的威胁,如果没有有效的防雷措施,可能会造成充电桩的损坏,甚至引发火灾、爆炸等严重后果。因此,为了保证充电桩的安全运行,需要在充电桩中安装浪涌保护器,以减少雷电对充电桩的影响。浪涌保护器是一种用于限制瞬态过电压和泄放电涌电流的电子装置,它可以在雷

汽车电子相关术语

SOASOA(Service-OrientedArchitecture,面向服务的架构)是一种在计算机环境中设计、开发、部署和管理离散模型的方法。是由Garnter1996年提出的概念,将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,目的是为

.Net Core中Host的作用和用法

Host简介在ASP.NETCore中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。Host是通过使用IHostBuilder接口和Host.Cr

计算机竞赛 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录0前言1机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别2深度学习-人脸识别过程人脸检测人脸识别MetricLarning3最后0前言🔥优质竞赛项目系列,今天要分享的是🚩深度学习机器视觉人脸识别系统该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🥇学长这里给一个题目综合评分(每项满分5分)

计算机毕设 opencv python 深度学习垃圾图像分类系统

文章目录0前言课题简介一、识别效果二、实现1.数据集2.实现原理和方法3.网络结构最后0前言🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业

Anaconda和Pycharm详细安装 配置教程

Anaconda:是一个开源的Python发行版本,其中包含了conda、Python等180多个科学包及其依赖项。【Anaconda下载】PyCharm:PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。【PyCharm下载】Anaconda的安装及环境配置一

JavaScript面试题整理(二)

数据类型篇13、其他值到字符串的转换规则?Null和Undefined类型,null转换为‘null’,undefined转换为‘undefined’Boolean类型,true转换为‘true’,false转换为‘false’Number类型的值直接转换,不过那些极小和极大的数字会使用指数形式Symbol类型的值直接

React(react18)中组件通信04——redux入门

React(react18)中组件通信04——redux入门1.前言1.1React中组件通信的其他方式1.2介绍redux1.2.1参考官网1.2.2redux原理图1.2.3redux基础介绍1.2.3.1action1.2.3.2store1.2.3.3reducer1.3安装redux2.redux入门例子3.

算法、数据结构、计算机系统、数据库MYSQL、概率论、数学实验MATLAB、数学建模、马原、英语、杂项、QT项目

算法冒号表达式(condition)?x:y可以三个条件以此类推(condition1)?x:(condition2)?y:z判断三角形最简单的办法boolcanFormTriangle(inta,intb,intc){return(a+b>c)&&(b+c>a)&&(a+c>b);}带空格的数据输入#include<

热文推荐