基于PostgreSQL 權(quán)限解讀
1 public權(quán)限解讀
用戶默認(rèn)情況下具有public權(quán)限,public默認(rèn)具有創(chuàng)建和使用schema的權(quán)限,因此意味著可以在schema中創(chuàng)建對象(包括表)、列出schema中的對象,并在其權(quán)限允許時(shí)訪問它們。
所以創(chuàng)建數(shù)據(jù)庫或schema完成后做的第一件事是
1.1 創(chuàng)建數(shù)據(jù)庫完成后
--回收schema的public權(quán)限 --revoke all on schema public from public; --正常情況使用這個(gè) revoke all on schema public,tiger,tiger_data,topology from public; --使用postgis擴(kuò)展使用這個(gè) --從core數(shù)據(jù)庫收回public的所有權(quán)限 revoke all on database core from public; revoke all on database postgres from public; --重新將schema授予數(shù)據(jù)庫所有者 grant all on schema public,tiger,tiger_data,topology to 數(shù)據(jù)庫所有者;
1.2 創(chuàng)建schema完成后
create schema history; revoke all on schema history from public; --重新將schema history授予數(shù)據(jù)庫所有者 grant all on schema history to 數(shù)據(jù)庫所有者;
2 測試
假設(shè)現(xiàn)在有一數(shù)據(jù)庫core.
2.1 postgrese用戶連接至core數(shù)據(jù)庫
psql -h localhost -p 5432 -U postgres -d core
--創(chuàng)建一個(gè)名稱sel的用戶 create user sel with nosuperuser nocreatedb nocreaterole noinherit login noreplication nobypassrls password '123'; --允許連接至數(shù)據(jù)庫core grant connect on database core to sel; --查看角色使用\duS+ \duS+ --或 \duS+ sel --查看用戶在schema的權(quán)限 \dp --查看數(shù)據(jù)庫的用戶 \l+
權(quán)限解釋:
r -- SELECT ("讀") w -- UPDATE ("寫") a -- INSERT ("追加") d -- DELETE D -- TRUNCATE x -- REFERENCES t -- TRIGGER X -- EXECUTE U -- USAGE C -- CREATE c -- CONNECT T -- TEMPORARY arwdDxt -- ALL PRIVILEGES (對于表,對其他對象會變化) * -- 用于前述特權(quán)的授權(quán)選項(xiàng)
2.2 在另一個(gè)進(jìn)程中運(yùn)行
psql -h localhost -p 5432 -U sel -d core
drop table aaa; create table aaa( objectid integer ); select * from features;
上面的sql報(bào)
ERROR: table "aaa" does not exist ERROR: no schema has been selected to create in ERROR: relation "features" does not exist
2.3 用postgrese用戶登錄core數(shù)據(jù)庫為sel用戶授權(quán)
psql -h localhost -p 5432 -U postgres -d core
您需要什么權(quán)限就授予什么權(quán)限,這里授予sel用戶可以select public schema下的所有對象。
grant usage on schema public to sel; grant select on all tables in schema public to sel;
2.4 再次轉(zhuǎn)到在另一個(gè)進(jìn)程中運(yùn)行
psql -h localhost -p 5432 -U sel -d core
select * from features; delete from features;
現(xiàn)在已經(jīng)可以正常查詢數(shù)據(jù)了,但是此用戶只有查詢權(quán)限。
3 刪除用戶
3.1 使用postgrese用戶連接至core數(shù)據(jù)庫
注意你授予用戶什么權(quán)限必須在drop用戶前先revoke,然后再刪除,否則報(bào)依賴錯(cuò)。所以授權(quán)文件保存好以便將來刪除用戶,不然查詢關(guān)聯(lián)性非常麻煩。
psql -h localhost -p 5432 -U postgres -d core
--回收分配的權(quán)限并刪除用戶 revoke select on all tables in schema public from sel; revoke usage on schema public from sel; revoke connect on database core from sel; drop role sel;
補(bǔ)充:PostgreSQL 用戶和權(quán)限管理
默認(rèn)用戶
postgres安裝完成后,會自動在操作系統(tǒng)和postgres數(shù)據(jù)庫中分別創(chuàng)建一個(gè)名為postgres的用戶以及一個(gè)同樣名為postgres的數(shù)據(jù)庫。
登錄
方式1:指定參數(shù)登錄
psql -U username -d database_name -h host -W
參數(shù)含義: -U指定用戶 -d要連接的數(shù)據(jù)庫 -h要連接的主機(jī) -W提示輸入密碼。
方式2:切換到postgres同名用戶后登錄
su username psql
當(dāng)不指定參數(shù)時(shí)psql使用操作系統(tǒng)當(dāng)前用戶的用戶名作為postgres的登錄用戶名和要連接的數(shù)據(jù)庫名。所以在PostgreSQL安裝完成后可以通過以上方式登錄。
創(chuàng)建用戶
方式1:在系統(tǒng)命令行中使用createuser命令中創(chuàng)建
createuser username
方式2:在PostgresSQL命令行中使用CREATE ROLE指令創(chuàng)建
CREATE ROLE rolename;
方式3:在PostgresSQL命令行中使用CREATE USER指令創(chuàng)建
CREATE USER username;
CREATE USER和CREATE ROLE的區(qū)別在于,CREATE USER指令創(chuàng)建的用戶默認(rèn)是有登錄權(quán)限的,而CREATE ROLE沒有。
\du 指令顯示用戶和用戶的用戶屬性
創(chuàng)建用戶時(shí)設(shè)定用戶屬性
基本語法格式
CREATE ROLE role_name WITH optional_permissions;
示例:在創(chuàng)建用戶時(shí)設(shè)定登錄權(quán)限。
CREATE ROLE username WITH LOGIN;
可以通過\h CREATE ROLE指令查看全部可設(shè)置的管理權(quán)限
修改用戶屬性
修改權(quán)限的命令格式
ALTER ROLE username WITH attribute_options;
例如:可通過以下方式禁止用戶登錄
ALTER ROLE username WITH NOLOGIN;
設(shè)置訪問權(quán)限
語法格式如下:
GRANT permission_type ON table_name TO role_name;
實(shí)例:
GRANT UPDATE ON demo TO demo_role; --賦予demo_role demo表的update權(quán)限 GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC to demo_role; --賦予demo_role所有表的SELECT權(quán)限
特殊符號:ALL代表所訪問權(quán)限,PUBLIC代表所有用戶
GRANT ALL ON demo TO demo_role; --賦給用戶所有權(quán)限 GRANT SELECT ON demo TO PUBLIC; --將SELECT權(quán)限賦給所有用戶
\z或\dp指令顯示用戶訪問權(quán)限。
\h GRANT顯示所有可設(shè)置的訪問權(quán)限
撤銷用戶訪問權(quán)限
語法格式如下:
REVOKE permission_type ON table_name FROM user_name;
其中permission_type和table_name含義與GRANT指令中相同。
用戶組
在postgres中用戶實(shí)際上是role,同時(shí)組也是role。 包含其他role的role就是組。
創(chuàng)建組示例:
CREATE ROLE temporary_users; GRANT temporary_users TO demo_role; GRANT temporary_users TO test_user;
切換ROLE
SET ROLE role_name; --切換到role_name用戶 RESET ROLE; --切換回最初的role
INHERIT權(quán)限:該屬性使組成員擁有組的所有權(quán)限
ALTER ROLE test_user INHERIT;
刪除用戶和組
刪除用戶和組很簡單:
DROP ROLE role_name; DROP ROLE IF EXISTS role_name;
刪除組role只會刪除組的role本身,組的成員并不會被刪除。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
如何使用Dockerfile創(chuàng)建PostgreSQL數(shù)據(jù)庫
這篇文章主要介紹了如何使用Dockerfile創(chuàng)建PostgreSQL數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-02-02postgresql 賦權(quán)語句 grant的正確使用說明
這篇文章主要介紹了postgresql 賦權(quán)語句 grant的正確使用說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01Docker環(huán)境下升級PostgreSQL的步驟方法詳解
這篇文章主要介紹了Docker環(huán)境下升級PostgreSQL的步驟方法詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01PostgreSQL 查看表的主外鍵等約束關(guān)系詳解
這篇文章主要介紹了PostgreSQL 查看表的主外鍵等約束關(guān)系詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01Postgresql排序與limit組合場景性能極限優(yōu)化詳解
這篇文章主要介紹了Postgresql排序與limit組合場景性能極限優(yōu)化詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12詳解如何在PostgreSQL中使用JSON數(shù)據(jù)類型
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它采用鍵值對的形式來表示數(shù)據(jù),支持多種數(shù)據(jù)類型,本文給大家介紹了如何在PostgreSQL中使用JSON數(shù)據(jù)類型,需要的朋友可以參考下2024-03-03PostgreSQL模式匹配與正則表達(dá)式方法總結(jié)
在postgresql中使用正則表達(dá)式時(shí)需要使用關(guān)鍵字“~”,以表示該關(guān)鍵字之前的內(nèi)容需匹配之后的正則表達(dá)式,這篇文章主要給大家介紹了關(guān)于PostgreSQL模式匹配與正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2022-11-11postgresql 循環(huán)函數(shù)的簡單實(shí)現(xiàn)操作
這篇文章主要介紹了postgresql 循環(huán)函數(shù)的簡單實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL 實(shí)現(xiàn)distinct關(guān)鍵字給單獨(dú)的幾列去重
這篇文章主要介紹了PostgreSQL 實(shí)現(xiàn)distinct關(guān)鍵字給單獨(dú)的幾列去重,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01