利用DBMS_METADATA包獲取許可權資訊(轉)
Oracle的9i增加了DBMS_METADATA包,從此在需要得到物件的建立指令碼時,不再需要通過查詢多張系統檢視去自己拼湊結果了。只需要呼叫這個包中的GET_DDL過程就可以輕鬆的獲取物件的建立腳步。
不過很多人對DBMS_METADATA包的瞭解僅限與此。當需要獲取使用者的許可權時,往往還是採用通過到資料字典中讀取的方式,其實DBMS_METADATA包本身就支援獲取許可權資訊。
DBMS_METADA他的GET_GRANTED_DDL過程可以用於獲取使用者的授權資訊。Oracle支援的授權相關資訊型別包括:OBJECT_GRANT、SYSTEM_GRANT、ROLE_GRANT、DEFAULT_ROLE、TABLESPACE_QUOTA和PROXY。
由於使用十分簡單,這裡給一個簡單的例子,就不詳細描述了:
SQL> CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE YANGTK;
使用者已建立
SQL> GRANT CONNECT TO TEST;
授權成功。
SQL> GRANT SELECT ANY TABLE TO TEST;
授權成功。
SQL> GRANT INSERT, UPDATE ON T TO TEST;
授權成功。
SQL> ALTER USER TEST QUOTA 10M ON YANGTK;
使用者已更改。
SQL> CREATE ROLE R1;
角色已建立
SQL> GRANT R1 TO TEST;
授權成功。
SQL> ALTER USER TEST DEFAULT ROLE R1;
使用者已更改。
SQL> ALTER USER TEST GRANT CONNECT THROUGH YANGTK;
使用者已更改。
SQL> SET LONG 10000
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', 'TEST') FROM DUAL;
DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','TEST')
----------------------------------------------------------------------
GRANT UPDATE ON "YANGTK"."T" TO "TEST"
GRANT INSERT ON "YANGTK"."T" TO "TEST"
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', 'TEST') FROM DUAL;
DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','TEST')
----------------------------------------------------------------------
GRANT SELECT ANY TABLE TO "TEST"
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', 'TEST') FROM DUAL;
DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','TEST')
----------------------------------------------------------------------
GRANT "CONNECT" TO "TEST"
GRANT "R1" TO "TEST"
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('DEFAULT_ROLE', 'TEST') FROM DUAL;
DBMS_METADATA.GET_GRANTED_DDL('DEFAULT_ROLE','TEST')
----------------------------------------------------------------------
ALTER USER "TEST" DEFAULT ROLE "R1"
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('TABLESPACE_QUOTA', 'TEST') FROM DUAL;
DBMS_METADATA.GET_GRANTED_DDL('TABLESPACE_QUOTA','TEST')
----------------------------------------------------------------------
ALTER USER "TEST" QUOTA 640 ON "YANGTK"
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('PROXY', 'TEST') FROM DUAL;
DBMS_METADATA.GET_GRANTED_DDL('PROXY','TEST')
----------------------------------------------------------------------
ALTER USER "TEST" GRANT CONNECT THROUGH "YANGTK"
需要注意的是,如果指定查詢的授權不存在,並不是簡單的返回未選定行,而是還會顯示錯誤資訊:
SQL> REVOKE SELECT ANY TABLE FROM TEST;
撤銷成功。
SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', 'TEST') FROM DUAL;
ERROR:
ORA-31608: 找不到型別為 SYSTEM_GRANT 的指定物件
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 86
ORA-06512: 在"SYS.DBMS_METADATA", line 631
ORA-06512: 在"SYS.DBMS_METADATA", line 1339
ORA-06512: 在line 1
未選定行
最後還要說明一點,DBMS_METADA他的GET_GRANTED_DDL不會顯示SYSDBA和SYSOPER許可權。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242364/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL物件許可權如何在後設資料中獲取-許可權解讀、定製化匯出許可權SQL物件
- Android手機獲取Root許可權Android
- 獲取AFP共享的資料夾及其許可權
- win10如何獲取檔案訪問許可權_win10怎麼獲取許可權看資料夾Win10訪問許可權
- win10如何獲得trustedinstaller許可權_win10獲取trustedinstaller許可權方法Win10Rust
- win10管理員許可權怎麼獲取 win10管理員許可權獲取的方法Win10
- 相容iOS 10:配置獲取隱私資料許可權宣告iOS
- 如何獲取最高管理員許可權 win10教育版最高管理員許可權Win10
- 織夢網站修改需要許可權嗎,如何獲取織夢網站修改許可權網站
- Win10系統如何獲取WindowsApps許可權Win10WindowsAPP
- win10怎麼獲得管理員許可權_win10獲取管理員許可權的步驟Win10
- win10管理員許可權獲取不了怎麼辦 win10管理員許可權獲取失敗解決方法Win10
- 可獲取管理員許可權,聯想公佈兩個特權提升漏洞
- 安裝laravel許可權包Laravel
- Android破取某漫畫app獲得VIP許可權AndroidAPP
- win10取得管理員許可權怎麼獲取 win10計算機管理員許可權獲得方法Win10計算機
- 許可權系統:一文搞懂功能許可權、資料許可權
- win10系統下獲取trustedinstaller許可權的方法Win10Rust
- 【自然框架】許可權的視訊演示(二):許可權到欄位、許可權到記錄框架
- 白 - 許可權提升和漏洞利用技巧
- 通過可寫檔案獲取 Linux root 許可權的 5 種方法Linux
- win10管理員許可權如何獲取 win10怎樣讓當前使用者獲得管理員許可權Win10
- 如何獲取Vivo系統的懸浮窗許可權狀態
- win10管理員許可權怎麼獲取 win10系統啟動管理許可權的辦法Win10
- MacOS Big Sur系統不需要通過獲取系統許可權而獲取HidpiMac
- 谷歌VirusTotal開源元件曝高危漏洞,可獲取內網訪問許可權谷歌Rust元件內網訪問許可權
- 許可權之選單許可權
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- win10怎麼獲取管理員許可權_win10讓當前使用者獲得管理員許可權的步驟Win10
- 基於Linux許可權提升的資訊收集Linux
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 如何讓普通使用者獲取root使用者的許可權
- win10系統下怎麼獲取administrator管理員許可權Win10
- 只需一個小bug,就可獲取facebook頁面的管理員許可權
- win10系統fonts資料夾沒有開啟的許可權如何獲取Win10
- 利用子域的System許可權通往父域
- 利用PATH環境變數 - 提升linux許可權~?變數Linux
- 利用DSRM賬號進行許可權維持