主頁 > 知識(shí)庫 > 基于PostgreSQL 權(quán)限解讀

基于PostgreSQL 權(quán)限解讀

熱門標(biāo)簽:合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 漯河外呼電話系統(tǒng) 辦公外呼電話系統(tǒng) 地圖標(biāo)注和圖片名稱的區(qū)別 外呼調(diào)研系統(tǒng) 海豐有多少商家沒有地圖標(biāo)注 打電話智能電銷機(jī)器人授權(quán) 重慶自動(dòng)外呼系統(tǒng)定制 美容工作室地圖標(biāo)注

1 public權(quán)限解讀

用戶默認(rèn)情況下具有public權(quán)限,public默認(rèn)具有創(chuàng)建和使用schema的權(quán)限,因此意味著可以在schema中創(chuàng)建對(duì)象(包括表)、列出schema中的對(duì)象,并在其權(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 測(cè)試

假設(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 (對(duì)于表,對(duì)其他對(duì)象會(huì)變化)
* -- 用于前述特權(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下的所有對(duì)象。

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安裝完成后,會(huì)自動(dòng)在操作系統(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)限

特殊符號(hào):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;

刪除用戶和組

刪除用戶和組很簡(jiǎn)單:

DROP ROLE role_name;
DROP ROLE IF EXISTS role_name;

刪除組role只會(huì)刪除組的role本身,組的成員并不會(huì)被刪除。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL 默認(rèn)權(quán)限查看方式
  • Postgresql 賦予用戶權(quán)限和撤銷權(quán)限的實(shí)例
  • 查看postgresql數(shù)據(jù)庫用戶系統(tǒng)權(quán)限、對(duì)象權(quán)限的方法
  • PostgreSQL教程(十二):角色和權(quán)限管理介紹
  • 用一整天的時(shí)間安裝postgreSQL NTFS權(quán)限
  • Postgresql 數(shù)據(jù)庫權(quán)限功能的使用總結(jié)

標(biāo)簽:晉城 蚌埠 珠海 錦州 來賓 衡陽 烏海 株洲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于PostgreSQL 權(quán)限解讀》,本文關(guān)鍵詞  基于,PostgreSQL,權(quán)限,解讀,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于PostgreSQL 權(quán)限解讀》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于PostgreSQL 權(quán)限解讀的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章