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.pswp.cn/news/895969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895969.shtml
英文地址,請注明出處:http://en.pswp.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…