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
英文地址,請注明出處:http://en.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 輸出&#…