openGauss中Schema賦權小試

語言: CN / TW / HK

目錄

 

概述

1.關於public的許可權要點:

2.關於使用者同名的schema的許可權要點:

3.關於普通schema的許可權要點:


 

概述

下面是openGauss官網對Schema的介紹:

Schema又稱作模式。通過管理Schema,允許多個使用者使用同一資料庫而不相互干擾,可以將資料庫物件組織成易於管理的邏輯組,同時便於將第三方應用新增到相應的Schema下而不引起衝突。

參考地址:Schema

資料庫建立後,預設具有一個schema叫做public,所有使用者都具有public的usage許可權;使用者可以建立其他的schema;另外建立資料庫使用者的時候,也會建立一個和該資料庫使用者同名的schema。

1.關於public的許可權要點:

只有初始化使用者和系統管理員可以在public下面建立函式,儲存過程和同義詞物件,其他使用者即使賦予了create許可權,也不能建立上述三種物件。可以把schema理解成作業系統的目錄(資料夾),所不同的是schema只有一層,不能巢狀建立。

以下舉例:teacher_li使用者已經賦予了public的create許可權:

grant create on SCHEMA public to teacher_zhao;)。

 

 

執行時報錯:

執行時出錯 確認要繼續執行嗎?

單擊“詳細資訊”瞭解詳情。

  SQL錯誤碼: = 42501

ERROR: permission denied to create function "f_class_eng1"

  Hint: must be sysadmin to create a function in public schema.

 行號: 10

 

 

 

在某些資料庫中,schema也叫作名稱空間(namespace),openGauss的系統表也叫作PG_NAMESPACE。查詢PG_NAMESPACE也可以看到每個schema的賦權情況。

 

 

根據上圖可以看出,teacher_zhao擁有public的create許可權(’C’)。

2.關於使用者同名的schema的許可權要點:

對於使用者同名的schema,即使賦予create許可權給其他使用者,其他使用者也無法在該schema下面建立資料庫物件,但是把usage許可權賦予其他使用者後,其他使用者是可以檢視該schema下面的表資訊的。

如上面所示,teacher_zhao擁有和使用者teacher_li 同名schema的create許可權,但是執行建立資料庫物件語句時,仍然報錯,不能執行:

執行時出錯 確認要繼續執行嗎?

單擊“詳細資訊”瞭解詳情。

  SQL錯誤碼: = 42501

ERROR: current user does not have privilege to role teacher_li

 行號: 3

 

 

需要把使用者/角色teacher_li賦予teacher_zhao之後,teacher_zhao才可以在teacher_li的同名schema下建立資料庫物件。

賦權語句:grant teacher_li to teacher_zhao;

執行結果:create table teacher_li.t1(a int);

說明:使用者擁有create許可權,即可認為使用者也擁有查詢的許可權,如下圖所示,teacher_zhao的usage許可權已經被回收:

 

 

REVOKE  usage on schema teacher_li from teacher_zhao;

然而還是能夠查詢表

回收

 查詢許可權:

 查詢表資料:select * from teacher_li.t1

3.關於普通schema的許可權要點:

 

 

 

普通schema的create許可權grant給其他使用者後,其他使用者即可以建立物件。

用clouduser分別建立schema teacher_zhao2、teacher_zhao3(指定AUTHORIZATION),並把create許可權賦給teacher_li:

create SCHEMA teacher_zhao2;

CREATE SCHEMA teacher_zhao3  AUTHORIZATION teacher_zhao;

grant create on SCHEMA teacher_zhao2 to teacher_li;

grant create on SCHEMA teacher_zhao3 to teacher_li;create SCHEMA teacher_zhao2;

CREATE SCHEMA teacher_zhao3  AUTHORIZATION teacher_zhao;

grant create on SCHEMA teacher_zhao2 to teacher_li;

grant create on SCHEMA teacher_zhao3 to teacher_li;v

查詢schema系統表:

select * from pg_namespace where nspname like 'teacher_zhao%'

 

 

可以發現沒有指定AUTHORIZATION的情況下,預設建立使用者是clouduser(系統管理員),而指定情況下,則建立使用者就是指定的使用者。

下面嘗試用teacher_li登入,建立資料庫物件:

create table teacher_zhao2.t2(a int);

create table teacher_zhao3.t2(a int);

建立成功。

作者:如魚得水

🍒如果您覺得博主的文章還不錯或者有幫助的話,請關注一下博主,如果三連點贊評論收藏就更好啦!謝謝各位大佬給予的支援!