大數(shù)據(jù)“復(fù)活”記
687
2025-04-02
安全認(rèn)證可以保證建立安全的數(shù)據(jù)庫連接,而建立連接后的安全訪問保護(hù)則是基于角色的對象訪問控制。用戶和權(quán)限的基礎(chǔ)概念在博文GaussDB(DWS) SQL進(jìn)階-database、schema、user和權(quán)限控制中有介紹,本文主要介紹一下具體的對象訪問控制。
訪問控制列表
訪問控制列表(Access Control List, ACL)是對象權(quán)限管理和權(quán)限檢查的基礎(chǔ),每個(gè)數(shù)據(jù)庫對象都具有ACL,ACL是存儲控制項(xiàng)(Access Control Entry, ACE)的集合,ACE中記錄著受權(quán)者grantee、grantee該用戶在對象上的操作權(quán)限和grantor授權(quán)者三部分。 grant 語句語法詳見grant語法說明。
postgres=# CREATE USER a WITH CREATEDB PASSWORD "QAZ2wsx@123!"; CREATE USER postgres=# CREATE USER b WITH CREATEDB PASSWORD "QAZ2wsx@123!"; CREATE USER postgres=# CREATE USER c WITH CREATEDB PASSWORD "QAZ2wsx@123!"; CREATE USER postgres=# CREATE SCHEMA privs; CREATE SCHEMA postgres=# GRANT CREATE,USAGE ON SCHEMA privs TO a,b,c; GRANT postgres=# SET ROLE a PASSWORD "QAZ2wsx@123!"; SET postgres=> CREATE TABLE privs.t1(a INT, b INT) DISTRIBUTE BY HASH (a); CREATE TABLE postgres=> GRANT SELECT ON TABLE privs.t1 TO b WITH GRANT OPTION; GRANT postgres=> \dp+ privs.t1 Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+------+-------+-------------------+-------------------------- privs | t1 | table | a=arwdDxtA/a +| | | | b=r*/a | (1 row) postgres=> SET ROLE b PASSWORD "QAZ2wsx@123!"; SET postgres=> GRANT SELECT ON privs.t1 TO c; GRANT postgres=> \dp+ privs.t1 Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+------+-------+-------------------+-------------------------- privs | t1 | table | a=arwdDxtA/a +| | | | b=r*/a +| | | | c=r/b | (1 row)
上面的運(yùn)行結(jié)果可以看到privs.t1這張表的ACL有3條ACE。第一條a=arwdDxtA/a說明grantee為a,擁有權(quán)限為arwdDxtA,grantor為a;第二條b=r*/a表示granteeb擁有由grantora賦予的select權(quán)限與再授予權(quán)限,其中r代表select權(quán)限,*代表再授予權(quán)限;第三條c=r/b說明grantorc僅擁有由granteeb賦予的select權(quán)限。
特殊的一點(diǎn)是第一條記錄中表owner沒有記錄GRANT OPTION權(quán)限,這是因?yàn)閛wner的GRANT OPTION權(quán)限認(rèn)為是來自于系統(tǒng)的,而不是owner自己擁有的。
對象權(quán)限管理
GRANT 命令將數(shù)據(jù)庫對象的特定權(quán)限授予一個(gè)或多個(gè)角色時(shí),如果聲明了 WITH GRANT OPTION ,則被授權(quán)的用戶可以將此權(quán)限賦予他人,否則就不能授權(quán)給他人。
REVOKE 命令用于撤銷一個(gè)或多個(gè)角色的權(quán)限,若指定了 GRANT OPTION FOR ,則僅撤銷角色對該權(quán)限的再授予能力,而不撤銷權(quán)限本身。否則,權(quán)限(包括再授予權(quán)限)將被撤銷。
如果用戶擁有某個(gè)權(quán)限,并同時(shí)擁有再授予權(quán)限,并將該權(quán)限授予了其他用戶,那么其他用戶擁有的權(quán)限都被成為依賴性權(quán)限。如果被依賴用戶所持有的權(quán)限或者再授予權(quán)限被撤銷,在聲明 CASCADE 關(guān)鍵字情況下依賴性權(quán)限也會被撤銷,否則撤銷動作提示失敗。revoke 語句語法詳見revoke語法說明。
在執(zhí)行授權(quán)操作時(shí),可能出現(xiàn)循環(huán)授權(quán)的情況,如下圖所示,A為某個(gè)表的owner,B同時(shí)擁有此表的 SELECT 權(quán)限和 WITH GRANT OPTION 選項(xiàng),且B將此權(quán)限賦予了用戶C,然后C又將權(quán)限賦予了用戶D,最后C企圖將同樣的權(quán)限賦予B。這一系列的授權(quán)操作構(gòu)成了一個(gè)環(huán),這個(gè)環(huán)是不允許出現(xiàn)的。
postgres=# CREATE USER d WITH CREATEDB PASSWORD "QAZ2wsx@123!"; CREATE USER postgres=# GRANT CREATE,USAGE ON SCHEMA privs TO d; GRANT postgres=# SET ROLE b PASSWORD "QAZ2wsx@123!"; SET postgres=> GRANT SELECT ON privs.t1 TO c WITH GRANT OPTION; GRANT postgres=> SET ROLE c PASSWORD "QAZ2wsx@123!"; SET postgres=> GRANT SELECT ON privs.t1 TO d WITH GRANT OPTION; GRANT postgres=> \dp+ privs.t1 Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+------+-------+-------------------+-------------------------- privs | t1 | table | a=arwdDxtA/a +| | | | b=r*/a +| | | | c=r*/b +| | | | d=r*/c | (1 row) postgres=> SET ROLE d PASSWORD "QAZ2wsx@123!"; SET postgres=> GRANT SELECT ON privs.t1 TO b WITH GRANT OPTION; ERROR: grant options cannot be granted back to your own grantor
總結(jié)
用戶是權(quán)限的最終體現(xiàn)者,所有的權(quán)限管理最終都體現(xiàn)在用戶對數(shù)據(jù)庫對象的操作權(quán)限是否被允許。合理的進(jìn)行權(quán)限授予,可以保護(hù)數(shù)據(jù)的安全性,防止非法用戶讀寫數(shù)據(jù)。
參考文檔:
1.GaussDB(DWS) SQL進(jìn)階-database、schema、user和權(quán)限控制
2.你應(yīng)該知道的數(shù)倉安全——默認(rèn)權(quán)限實(shí)現(xiàn)共享schema
3.你應(yīng)該知道的數(shù)倉安全——安全認(rèn)證
想了解GuassDB(DWS)更多信息,歡迎微信搜索“GaussDB DWS”關(guān)注微信公眾號,和您分享最新最全的PB級數(shù)倉黑科技,后臺還可獲取眾多學(xué)習(xí)資料哦~
EI企業(yè)智能 Gauss AP 數(shù)據(jù)倉庫服務(wù) GaussDB(DWS) 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。