從Oracle資料庫遷移或進行大規模許可權管理時,逐個為使用者授予對象或Schema的存取權限操作繁瑣。為簡化此過程,PolarDB提供相容Oracle風格的系統許可權(SYSTEM PRIVILEGE)體系。通過單條命令,可為使用者授予對某一類對象(如所有表、所有視圖)的全域操作許可權,從而提升資料庫營運和管理效率。
適用範圍
您的PolarDB PostgreSQL版(相容Oracle)叢集的修訂版本需為2.0.14.18.37.0及以上
啟用並使用系統許可權
以下流程介紹如何完成從啟用功能、建立使用者、授予許可權到最終驗證的全過程。
步驟一:啟用系統許可權功能
系統許可權功能預設關閉,使用前需前往PolarDB控制台的頁面來開啟polar_enable_system_privilege參數。
步驟二:授予系統許可權
前置條件
僅支援以下三類使用者執行GRANT系統許可權的語句:
高許可權帳號。
被授予
GRANT ANY PRIVILEGE許可權的普通帳號。被授予某項系統許可權且帶有
WITH ADMIN OPTION的普通帳號(僅能轉授其擁有的該項許可權)。
文法說明
GRANT sys_priv1 [, sys_priv2 ...] TO my_user_or_role1 [, my_user_or_role2 ...] [ WITH ADMIN OPTION ];一次可以對一到多個使用者或角色授予一到多種系統許可權。
系統許可權
sys_priv有多種許可權種類可以選擇,具體的許可權種類及其作用,請參考系統許可權。如果指定
WITH ADMIN OPTION選項,則被授權的使用者或角色可以將該許可權繼續授權給其他使用者或角色,意味著該許可權可以傳播。
使用樣本
為開發人員dev_user授予在任何Schema下建立表和查詢任何錶的許可權。
建立一個用於測試的普通帳號。
CREATE USER dev_user WITH PASSWORD 'Your_Secure_Password123';為
dev_user授予跨Schema建立表和查詢表的系統許可權。GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user;(可選)如果希望
dev_user也能將這些許可權授予其他使用者,可在授權時附加WITH ADMIN OPTION。-- 授予 dev_user 許可權,並允許其將這些許可權轉授給其他使用者 GRANT CREATE ANY TABLE, SELECT ANY TABLE TO dev_user WITH ADMIN OPTION;
步驟三:驗證許可權生效
確認dev_user已獲得預期的許可權。
使用
dev_user帳號重新串連資料庫。嘗試在一個非同名Schema下建立表並插入資料。
CREATE TABLE public.my_test_table (id INT); INSERT INTO public.my_test_table VALUES (1);嘗試查詢該表,驗證
SELECT ANY TABLE許可權。SELECT * FROM public.my_test_table;預期返回結果:
id ---- 1
如果以上操作均成功執行,說明系統許可權已正確生效。
步驟四:管理與查詢許可權
查看或撤銷已授予的系統許可權。
查詢許可權
使用
DBA_SYS_PRIVS視圖查詢所有使用者擁有的系統許可權。說明查詢特定使用者時,需將指定使用者名稱轉換為全大寫形式。
-- 由高許可權帳號執行 SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION FROM DBA_SYS_PRIVS WHERE GRANTEE = 'DEV_USER';預期返回結果如下:
grantee | privilege | admin_option ----------+------------------+-------------- DEV_USER | CREATE ANY TABLE | YES DEV_USER | SELECT ANY TABLE | YES使用
USER_SYS_PRIVS視圖查看目前使用者擁有的系統許可權。-- 由 dev_user 執行 SELECT PRIVILEGE, ADMIN_OPTION FROM USER_SYS_PRIVS;預期返回結果如下:
privilege | admin_option ------------------+-------------- CREATE ANY TABLE | YES SELECT ANY TABLE | YES
查詢結果中,grantee是被授權的使用者或角色,privilege 是許可權名稱,admin_option為YES表示該許可權可被轉授。
回收許可權
文法說明
REVOKE sys_priv1 [, sys_priv2 ...] FROM my_user_or_role1 [, my_user_or_role2 ...];使用樣本
使用REVOKE命令從使用者處收回系統許可權。
-- 由高許可權帳號執行
REVOKE CREATE ANY TABLE, SELECT ANY TABLE FROM dev_user;系統許可權
下表列出PolarDB支援的系統許可權及其作用。
類別 | 許可權名 | 授權的操作 |
|
| 建立私人或公用DBLink(PolarDB中不區分二者)。 |
| 修改私人或公用DBLink(PolarDB中不區分二者)。 | |
| 刪除私人或公用DBLink。 | |
|
| 建立目錄。 |
|
| 在任何使用者Schema中建立索引。 |
| 在任何使用者Schema中修改索引。 | |
| 在任何使用者Schema中刪除索引。 | |
|
| 在使用者的同名Schema中建立物化視圖。 |
| 在任何使用者Schema中建立物化視圖。 | |
| 在任何使用者Schema中修改物化視圖。 | |
| 在任何使用者Schema中刪除物化視圖。 | |
|
| 在使用者的同名Schema中建立操作符。 |
| 在任何使用者Schema中建立操作符。 | |
|
| 授予任意系統許可權。 |
|
| 在使用者的同名Schema中建立預存程序、函數和包。 |
| 在任何使用者Schema中建立預存程序、函數和包。 | |
|
| 建立使用者或角色(PolarDB中不區分二者許可權校正)。 |
| 修改使用者或角色。 | |
| 刪除使用者或角色。 | |
| 對使用者或角色執行授權操作。 | |
|
| 在使用者的同名Schema中建立序列。 |
| 在任何使用者Schema中建立序列。 | |
| 在任何使用者Schema中修改序列。 | |
| 在任何使用者Schema中刪除序列。 | |
|
| 在使用者的同名Schema中建立同義字。 |
| 在任何使用者Schema中建立同義字。 | |
| 建立公用同義字。 | |
| 在任何使用者Schema中刪除同義字。 | |
| 刪除公用同義字。 | |
|
| 在使用者的同名Schema中建立表。 |
| 在任何使用者Schema中建立表。 | |
| 在任何使用者Schema中修改表或視圖。 | |
| 在任何使用者Schema中刪除表或截斷( | |
| 在任何使用者Schema中為表、視圖和物化視圖添加評論資訊。 | |
| 在任何使用者Schema中查詢表、視圖和物化視圖。 | |
| 在任何使用者Schema中向表插入資料行。 | |
| 在任何使用者Schema中更新表的資料行。 | |
| 在任何使用者Schema中刪除表的資料行。 | |
|
|
|
| 在任何使用者Schema中建立DML觸發器或系統觸發器。 | |
| 建立資料庫層級的系統觸發器(此外仍需 | |
|
| 在使用者的同名Schema中建立類型。 |
| 在任何使用者Schema中建立類型。 | |
|
| 在使用者的同名Schema中建立視圖。 |
| 在任何使用者Schema中建立視圖。 | |
| 在任何使用者Schema中刪除視圖。 |