9.PG数据库层权限管理(pg系列课程)第2遍

一、PostgreSQL数据库属主

  • Postgres中的数据库属主属于创建者,只要有createdb的权限就可以创建数据库,数据库属主不一定拥有存放在该数据库中其它用户创建的对象的访问权限。
  • 数据库在创建后,允许public角色连接,即允许任何人连接。(如果要限制某个用户,那么先要取消public用户的权限。)
  • 数据库在创建后不允许除了超级用户和owner之外的任何人在数据库中创建schema。(允许创建表不允许创建schema。是因为创建的表是默认在public下的,如果要创建schema的话需要单独授权)
  • 数据库在创建后,会自动创建名为public的schema,这个schema的al权限已经赋予给了public角色,即允许任何人在里面创建对象,但对己存在的其它用户的表不具有任何权限。

二、PostgreSQl数据库权限

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }ON DATABASE database_name [, ...]TO role_specification [, ...] [ WITH GRANT OPTION ][ GRANTED BY role_specification ]

(一)CREATE:

可以在指定数据库创建schema的权限

(建表的权限不需要单独给,建库的时候就已经把建表的权限给了public)

例如:grant create on database test01 to u1;


(二)CONNECT:

可以连接到指定数据库的权限

授权用户连接数据库的权限
grant connect on database db_name to user_name;撤销用户连接数据库的权限
revoke connect on database db_name from public;
revoke connect on database db_name from user_name;由于数据库在创建后,允许public角色连接,即允许任何人连接。所以如果要取
消某个用户对指定数据库连接的权限,需要先取消public的连接权限,再取消该
用户的连接权限。


(三)TEMPORARY:

可以创建临时表的权限

(四)ALL:

指定数据库所有的权限

(五)查看哪些用户有哪些数据库的哪些权限

查看哪些用户有哪些数据库的哪些权限
select datname,datacl from pg_database where datname='db_name';datacl 列是一个数组类型,权限条目通常以以下格式表示:
rolename=权限/授予者rolename:拥有权限的角色或用户。
权限:授予的权限,例如 CTc(CREATE、TEMPORARY、CONNECT)。
授予者:授予该权限的角色。datname |                     datacl
---------+------------------------------------------------mydb    | {admin=CTc/postgres,user1=c/postgres}postgres| template1 | {=c/postgres,postgres=CTc/postgres}template0 | {=c/postgres,postgres=CTc/postgres}admin=CTc/postgres 表示用户 admin 拥有 CREATE、TEMPORARY 和 CONNECT 权限,这些权限是由 postgres 用户授予的。
user1=c/postgres 表示用户 user1 拥有 CONNECT 权限,这些权限是由 postgres 用户授予的。
=c/postgres 表示所有用户(PUBLIC)都拥有 CONNECT 权限,这些权限是由 postgres 用户授予的。

三、postgresql数据库级别的参数如何设置

(一)设置方法

postgresql是参数设置分为实例级、数据库级、用户级和会话级,而有些参数可以在所有级别中设置,优先级顺序为会话级>用户级>数据库级>实例级。

数据库参数配置语法:
ALTER DATABASE 名称 SET  配置参数 {TO|=} {值|DEFAULT}
ALTER DATABASE 名称 SET  配置参数 FROM CURRENT
ALTER DATABASE 名称 RESET 配置参数
ALTER DATABASE 名称 RESET ALL

(二)设置示例

1、设置数据库搜索路径:
alter database db_name set search_path to "$user", public, schema_name;

设置模式搜索路径
postgres=# alter database postgres set search_path to "$user",public,u1_s1;
ALTER DATABASE
postgres=# show search_path;search_path
-----------------"$user", public
(1 row)设置完要exit退出再重新连进来才生效。
postgres=# exit
[postgres@db /var/postgre/data]$psql
psql (16.0)
Type "help" for help.postgres=# show search_path;search_path
------------------------"$user", public, u1_s1
(1 row)postgres=# \dtList of relationsSchema |   Name   | Type  |  Owner
--------+----------+-------+----------public | t0102    | table | postgrespublic | test     | table | r11public | test_con | table | postgrespublic | tt       | table | postgresu1_s1  | test1    | table | u3u1_s1  | test2    | table | u3u1_s1  | test3    | table | u3
(7 rows)postgres=#

2、配置连接某个库时可使用的工作内存
alter database db_name set work_mem ='8MB';

设置的是连接到这个数据库时给这个用户分配的内存

3、配置连接某个库时可使用的维护内存
alter database db_name set maintenance_work_mem TO  '256MB';

4、配置连接某个库后使用的时区
alter database db_name set TimeZone to cet;
alter database db_name set DateStyle to SQL, DMY;(重新登录生效)


5、配置连接某个库后执行语句最多时长(执行1秒超时)
alter database db_name set statement_timeout =1000;


6、配置连接某个库后默认的客户端编码,配置客户端编码为gbk,适用于数据库编码
为utf8,应用程序编码为gbk的应用

alter database db_name set client_encoding to gbk;

7、配置某个库使用日志记录级别(设置后,对这个数据库的访问不记录日志)
alter database db_name set log statement=none;

8、配置连接某个库后的wal日志写盘级别设置后,该库的更新操作只要求本地提交)
alter database db_name set synchronous_commit to local;


9、配置连接某个库后禁用某个规划器(禁用indexonlyscan扫描)
alter database db_name set enable_indexonlyscan to off;

10.配置连接某个库后执行出错时中断连接(对新会话生效)
alter database db_name set exit_on_error to on;

--重新连接后
select pg_backend_pid();

postgres=# alter database u3_db set exit_on_error to  on;
ALTER DATABASE
postgres=# exit
[postgres@db /var/postgre/data]$psql -d u3_db
psql (16.0)
Type "help" for help.返回当前连接到数据库的会话所对应的后端进程的进程 ID(PID)
u3_db=# select pg_backend_pid();pg_backend_pid
----------------4615
(1 row)u3_db=# create table kil;
FATAL:  syntax error at or near ";"
LINE 1: create table kil;^
server closed the connection unexpectedlyThis probably means the server terminated abnormallybefore or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
u3_db=# select pg_backend_pid();返回当前连接到数据库的会话所对应的后端进程的进程 ID(PID),可以看到进程已经变了pg_backend_pid
----------------4704
(1 row)u3_db=#

10、设置为默认值

--设置某个个性化设置为默认值
ALTER DATABASE db_name reset exit_on_error;
--设置所有个性化设置为默认值
ALTER DATABASE db_name reset ALL;

(三)查看个性化设置

1、查看所有个性化配置
\drds

u3_db=# \drdsList of settingsRole | Database |              Settings
------+----------+------------------------------------| postgres | search_path="$user", public, u1_s1| u3_db    | exit_on_error=on
(2 rows)u3_db=#


2、查询数据库的连接数限制只能查看数据字典表
select datname,datconnlimit from pg_database;

连接数限制的设置可以在实例级别,也可以在数据库级别

u3_db=# select datname,datconnlimit from pg_database;datname  | datconnlimit
-----------+--------------template1 |           -1template0 |           -1pubdb     |           -1pubdb1    |           -1u3_db     |           -1newdb1    |           -1postgres  |           -1
(7 rows)u3_db=#
-1表示没有限制。

四、PostgreSQl数据库属性修改
数据库的属性我们可以进行修改,修改范围是数据库名字、属主、表空间。

(一)修改数据库的名称
ALTER DATABASE 名称 RENAME TO 新的名称

(二)修改数据库的属主

ALTER DATABASE 名称 OWNER TO {新的属主|CURRENT USERISESSION_USER}

(三)修改数据库到新的表空间

ALTER DATABASE 名称 SET TABLESPACE 新的表空间

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

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

相关文章

2.19学习(php文件后缀)

misc buu-后门查杀 下载附件,我们用火绒安全扫一下然后点击详情进入该文件所在文件夹,再用记事本打开该文件,搜索flag无果,再试试pass(由题目中的密码联系到pass,password,key等)&a…

PMBOK第7版整体架构全面详解

1. 引言 7月1日对于项目管理从业者和研究者而言,是个非凡意义的一个时间,这一天,翘首以待的《 项 目管理知识体系指南 》(PMBOK)第七版终于发布了。 总体而言,PMBOK第七版集百家之所长,成一…

C++:类与对象,定义类和构造函数

#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //如何让定义一个类 // 封装 // 1、将数据和方法定义到一起。 // 2、把想给你看的数据给你看&#xff0c;不想给你看的封装起来。 通过访问限定符来实现 class Stack { public: //1.成…

nginx 部署前端vue项目

?? 主页&#xff1a; ?? 感谢各位大佬 点赞?? 收藏 留言?? 加关注! ?? 收录于专栏&#xff1a;前端工程师 文章目录 一、??什么是nginx&#xff1f;二、??nginx 部署前端vue项目步骤 2.1 ??安装nginx 2.1.1 ??windows环境安装2.1.2 ??linux环境安装 2.2 …

蓝桥杯备考策略

备赛策略 (1-2周):基础算法数据结构 (3-5周):动态规划/贪心图论 (6-8周):全真模拟查漏补缺 阶段1:基础巩固(第1-2周) **目标:**掌握基础数据结构和必考算法&#xff0c;熟悉蓝桥杯题型。 学习内容: 数据结构:数组、字符串、栈、队列、哈希表、二叉树(遍历与基本操作)。 基础…

tmux和vim的基本操作

Tmux Tmux 的核心功能 多窗口和多面板&#xff1a; 在一个终端中创建多个窗口&#xff08;Windows&#xff09;&#xff0c;每个窗口可以运行不同的任务。 在每个窗口中&#xff0c;可以进一步分割成多个面板&#xff08;Panes&#xff09;&#xff0c;实现分屏操作。 会话…

Lineageos 22.1(Android 15) 开机向导制作

一、前言 开机向导原理其实就是将特定的category的Activity加入ComponentResolver&#xff0c;如下 <category android:name"android.intent.category.SETUP_WIZARD"/>然后我们开机启动的时候&#xff0c;FallbackHome结束&#xff0c;然后启动Launcher的时候…

【二分搜索 C/C++】洛谷 P1873 EKO / 砍树

2025 - 02 - 19 - 第 55 篇 Author: 郑龙浩 / 仟濹(CSND) 【二分搜索】 文章目录 洛谷 P1873 EKO / 砍树题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例 #2输入 #2输出 #2 说明/提示题目中的部分变量思路代码 洛谷 P1873 EKO / 砍树 题目描述 伐木工人…

DeepSeek系列模型发展:从LLM到V3、R1的技术突破与优化各阶段的重要论文汇总(附下载地址)

DeepSeek 系列模型从最初的 LLM 版本发展到最新的 V3 和 R1 版本&#xff0c;在架构设计、训练效率和推理能力方面不断取得进步。以下是各版本按时间倒序的详细信息&#xff1a; 1. DeepSeek-R1 发布时间&#xff1a;2025年1月 论文标题&#xff1a;DeepSeek-R1: Incentivizi…

HTTP SSE 实现

参考&#xff1a; SSE协议 SSE技术详解&#xff1a;使用 HTTP 做服务端数据推送应用的技术 一句概扩 SSE可理解为&#xff1a;服务端和客户端建立连接之后双方均保持连接&#xff0c;但仅支持服务端向客户端推送数据。推送完毕之后关闭连接&#xff0c;无状态行。 下面是基于…

推荐一款AI大模型托管平台-OpenWebUI

推荐一款AI大模型托管平台-OpenWebUI 1. OpenWebUI 1. OpenWebUI什么? 官网地址&#xff1a;https://openwebui.com/ GitHub地址&#xff1a; https://github.com/open-webui/open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离…

js中常用方法整理

数据类型 typeOf()Number&#xff08;&#xff09;parseInt()parseFloat()- * / %检测数据类型转换为数字转换为整数类型转换为浮点类型非加法的数字运算toString()Boolean()String()转换为字符串&#xff0c;不能转换undefined/null字符串拼接转换为布尔类型转换为字符串、所有…

java练习(33)

ps:题目来自力扣 最强回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的 回文 子串。 class Solution {public String longestPalindrome(String s) {if (s null || s.length() < 1) {return "";}int start 0, end 0;for (int i 0; i < s.length();…

本地部署DeepSeek大模型

环境&#xff1a;nuc工控机器 x86架构 ubuntu20.04 1、浏览器打开Download Ollama on Linux&#xff0c;复制命令。 2.打开终端&#xff0c;输入命令。 curl -fsSL https://ollama.com/install.sh | sh 等待安装&#xff0c;安装完成后&#xff0c;终端输入 ollama&#xff…

Nginx 常用命令和部署详解及案例示范

一、Nginx常用命令 1.1 启动 Nginx 要启动 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl start nginx1.2 停止 Nginx 如果需要停止 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl stop nginx1.3 重启 Nginx 在修改了 Nginx…

2025鸿蒙开发面试题汇总——通俗易懂

问题和通俗易懂的答案&#xff0c;覆盖鸿蒙开发的核心知识点和实际场景&#xff0c;方便面试时快速评估候选人能力&#xff1a; 一、基础概念&#xff08;必问&#xff09; 鸿蒙和安卓最大的区别是什么&#xff1f;举个实际例子。 答案&#xff1a;鸿蒙是“分布式操作系统”&am…

Kotlin 优雅的接口实现

1. 日常遇到的冗余的接口方法实现 日常开发中&#xff0c;经常会要实现接口&#xff0c;但是很多场景中&#xff0c;只需要用到其中一两个方法&#xff0c;例如 ActivityLifecycleCallbacks&#xff0c;它有很多个接口需要实现&#xff0c;但是很多时候我们只需要用到其中的一…

Java List 自定义对象排序 Java 8 及以上版本使用 Stream API

从 Java 8 开始&#xff0c;你可以使用 Stream API 对 List 进行排序&#xff0c;这种方式更加简洁和灵活。 以下是一个示例代码&#xff1a; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;// 自定…

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构&#xff0c;包含一系列功能要素&#xff0c;被分为大约20个模块 Spring核心容器&#xff1a;包含Core、Bean、Context、Expression Language模块 Core &#xff1a;其他组件的基本核心&#xff…

Linux内核读写锁与读写信号量的区别及选用

在Linux内核中&#xff0c;读写锁&#xff08;rwlock_t&#xff09;和读写信号量&#xff08;struct rw_semaphore&#xff09;是两种不同的同步机制&#xff0c;适用于不同的场景。以下是它们的区别和选用建议&#xff1a; 核心区别 特性读写锁 (rwlock_t)读写信号量 (struct…