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);

創建成功。

作者:如魚得水

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