Oracle权限管理(三):查找用户具有的权限

我们知道Oracle的权限划分的很细,所以做很多操作如果没有相应的权限就会出错.只有创建数据库后默认生成的用户sys是权限最高的,也拥有的有的权限.

假如有用户Arwen,我们怎么查找该用户拥有的所有权限呢?我们知道最常见有系统权限和对象权限.不过实际上还有些特殊的权限严格来说不归为这两类.

 

系统权限(System Privileges)

所谓系统权限指允许用户执行特定的操作.该操作一般不是针对特定的一个对象.比如常见的系统权限有:create table,create view,create session...

 

查看所有系统权限

我们可以通过如下语句查找数据库中定义的的所有System privileges.

SELECT * FROM SYSTEM_PRIVILEGE_MAP

 

查看用户的所有系统权限

可以通过如下语句查找用户Arwen所拥有的所有system privileges

SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ARWEN'; 或者

SELECT * FROM USER_SYS_PRIVS;或者

SELECT * FROM SESSION_PRIVS; //当前session权限.有时一些权限可能只针对当前session.所有该语句结果可能比前两个语句结果多.大部分时候是相等.

 

 

我们看到有一列叫ADMIN_OPTION,该列的值是yes或no.

为yes表示该用户还可以把该权限赋予其他用户,为no则不能.例如

grant create table to ARWEN with admin option;// admin_option为yes. 用户ARWEN可以这样继承给别的用户赋权.grant create table to weiwenhp.

grant create table to ARWEN; //admin_option 为no.

 

那你可能会问如果某个用户已经有admin option权限,怎么去掉.应该这样

revoke create table from arwen; //必须先revoke才行

grant create table to arwen;

 

如果用户有create table权限,但想赋予admin option权限.可以这样

--revoke create table from arwen;  //不是必须的

grant create table to arwen with admin option

 

对象权限

对象权限是跟具体的某一个对象相关的,相对system privileges 权限来说细化很多.很多对象权限实际上被包含在某个system privileges中.常见的对象权限有.

select on table_tmp; execute on package_tmp; read on directory_tmp..........

 

SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'ARWEN';或者

SELECT * FROM USER_TAB_PRIVS WHERE GRANTEE = 'ARWEN';

其中有一列叫grantable,跟系统权限里讲到的admin_option基本一样.

 

 

查找用户表空间权限

我们创建表时如果不显式指定表空间,则会使用user的默认表空间.但也可以建表时显式指定表空间.如果对某个表空间没有访问权限则会报错.

例如create table tmp(id int) tablespace system; //ORA-01950: no privileges on tablespace 'SYSTEM' 

我们可以通过如下语句来赋予权限

ALTER USER arwen QUOTA 1K ON SYSTEM; //可以在表空间system中使用1K的空间.

ALTER USER arwen QUOTA UNLIMITED ON SYSTEM; //可以无限制使用

 

把表移到另一个表空间

假如某个表已经放在某个表空间中了,现在想移到另外一个表空间咋整呢?如果只是普通表,没有像lob类型的列,也没有索引.

则ALTER TABLE tab_tmp MOVE TABLESPACE  system; //把表tab_tmp移到表空间system

假如有列txt是lob类型的.则ALTER TABLE tab_tmp MOVE LOB (txt) STORE AS (tablespace system);

如果有索引.得先通过select index_name from ind where table_name = 'TAB_TMP' and index_type = 'NORMAL';查找得到索引名,假如为ind1

  ALTER INDEX ind1 REBUILD TABLESPACE system;

 

可以通过如下语句查找到用户有权限使用的表空间

SELECT * FROM USER_TABLESPACES;

 

用户默认的表空间

SELECT DEFAULT_TABLESPACE FROM USER_USERS WHERE USERNAME

 

JAVA权限

如果要使用java相关的资源.可以用下面语句查找是否有相关权限

SELECT * FROM USER_JAVA_POLICY;或者

SELECT * FROM DBA_JAVA_POLICY where grantee = 'ARWEN';

 

 

通过角色(role)间接得到的权限

在上面你通过dba_sys_privs查询权限可能返回结果为空.但实际上该用户却有很多权限.这样因为该用户通过role间接得到有很多权限.所有我们得先查到该用户拥有哪些角色,再看该角色有哪些权限.

查看用户拥有哪些role权限

SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'ARWEN';

 

查看role对应有哪些权限

SELECT privilege FROM ROLE_SYS_PRIVS where role = 'ROLE1';

 

 

但假如有传递作用的role咋整呢,比如把role one给role two,再把role two赋予给role three. 此时three就同时拥有one和two的.

这时得用个start with去遍历下把所有role都找出来就行.

 

角色的密码

我们创建登陆用户时会指定用户名密码,这是比较好理解.但是创建角色时也可以指定密码.(平时貌似很少用到).我们也可以简单的理解成为了安全起见,开了个双重密码.就像你在保险箱中还放有一个保险箱,需要另外再输入一个啥密码才能打开.

 

假如创建角色role1

create role1 identified by pwd;

grant select any table to role1;

grant role1 to arwen;

/用arwen连接一个session//

实际上此时arwen并没拥有了role1的权限.需要在此session中执行如下语句

set role role1 identified by pwd; //如果密码为空就是set role role1 identified by null;

此时该session需要有了role1的权限.但如果重新连接一个session仍然没有role1的权限.

 

如果要想让用户不用这么麻烦老输密码咋办.可以把role1设为default role就不再需要每次输入密码了.

alter user arwen default role 'ROLE1'; //这样每次arwen登陆都拥有role1的权限,不需要输入密码了.

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORACLE数据库智能化管理系统2012 软件介绍 序言 ORACLE数据库管理们: 你们还在为处理日常大量数据,天天写过多的SQL语句而烦恼吗? 还在为由于没有面面具到的软件来汇制想要的日常数据报表而烦恼吗? 还在为查找帐务不平的数据或数据重复,而不知是哪些数据错误或重复,造成不能继续操作,而费时费力手工查找问题所在而烦恼吗? 还在为数据要多字段大批量处理或指定满足过多条件,处理成特定数据而手工劳动烦恼吗? 还在为两表数据多字段相关联,要批量修改其一表多字段数据成另一表数据值,而不知怎样做而烦恼吗? 还在为查找数据库安全情况,不知权限分配情况如何?查起来又费时费力,而烦恼吗? 还在为数据库安全情况,表或角色权限批量授权或撤权,操作起来又费时费力,而烦恼吗? 还在为需要多表数据综合计算才能求得到想要的数据结果,而书写SQL语句书写起来复杂而烦恼吗? 还在为达到求某种数据值需要多表数据关联起来后得到结果重复,想去除多余行值,单独书写的SQL语句又无法解决而频繁手工操作或通过编写软件才能实现想要的结果而烦恼吗? 还在为查看数据库会话情况及死锁情况,想批量处理这些死锁及断开不必要空闲会话,一一处理而手功劳动吗? 还在为日常数据处理分析,从查询结果中,求出可自定任意选择行及数字型字段数据求合,而手工一行行、一列列累加求和吗? 还在为某种数据不同类别所占总数比例及各多少?而手工累加一一计算吗?本系统使用了ABC方法计算得出结果。 查询数据条件参数,智能化表字典辅助批量字段输入功能,使您的工作简单而更加轻松,用起来更加顺手。 查询或导入的数据结果智能化创建计算字段和行列分类合计,从而进一步使结果数据更加理想化,省去了您宝贵的数据计算时间。 智能化SQL历史语句保存和历史SQL智能注解查询功能,节省了您智能化重复创建和查询SQL语句的时间,提高了您的工作效率。 数据库状态及运行情况综合查看,使您了解ORACLE运行状况及空间、日志归档、数据文件等使用情况更直观,并可智能生成数据库热备份脚本和备份恢复方案,为您的数据库保驾护航,使您高枕无忧。 本系统可执行SQL分组语句后,再对结果某值代码变为相对应名称,从而提高了数据库对SQL语句执行性能,减轻了因关联表太多查询,造成数据库性能下降带来的负担。 本系统可对执行SQL语句的结果集批量逐行处理多字段值一起做为检索条件,从它表中取出想要的多字段(值或计算结果)数据对相应的目标多字段进行赋值,从而简化了SQL语句书写难度,减少查询时间,提高了综合性能。 批量数据比较功能,增加了数字型字段4种(左右两边数据加减乘除)处理方式和4种行数据处理(左右两边互移或互复制行),可从数据源复合查询结果数据与目标数据进行运算,达到想要的结果等。 数据窗口右键菜单功能整合多种处理,功能强大,简单易操;重复数据可自动处理成唯一,也可自行处理;可自定义选择从查询结果集中的数行,进行数据求合及自定义图形项目分析;字段的10多种属性设置;数据窗口自创帮你省去建表才能进行数据处理的麻烦;各行数据在总数据所占的比例,一目了然,省去你一一计算。 生成可定义标准化数据代码;补足不足数据代码位数; 自由SQL语句查询参数多字段批量字典输入; 外部数据批量进行赋值处理; 数据列名可汉字后,导出成xls格式。 自由选择更新表数据方式,减少对数据库过多无关字段操作。 可根据查询结果自动生成IN、DECODE等多形式函数的参数,省去你查询手工输入上述函数多参数时的痛苦。 批量处理查询结果集中数据去除多余前后空格,增加对多字段字符串数据标准化,替换或去除数据中任意数据位数据,使其达到你想要的数据。 自动创建并可导出全数据库同义词创建语句,省去了你书写的麻烦。 您可以自由定制数据过滤、排序等条件、打印预览并可自动缩放到整张纸大小打印、打印数据行、列自己选定,打印设置自由灵活。 自动生成序列数据,切换数据库,无须退出系统。 人不在时,系统有锁定功能,防止别人动您数据! 您可以自动生成带分组小计的数据查询结果,使用你看的数据更加清晰。 分组查询条件SQL语句(带不带分组小计随您)智能化生成,只需您动几下鼠标就可完成。 交叉数据报表智能化生成,省去你为了一时的数据,而劳命伤财地去开发系统。 过程、触发器、表结构、同义词、视图、在线会话等查看一目了然。 给有关部分下达通知,消息框自动弹出。 。。。。。。。 本系统以智能化语句书写及批量处理数据及图形分析数据为特点,可以解决你的上述及未述后顾之忧,尽量把处理数据的主动权让给用户{本系统许多功能,只要你灵活运用,就可以得到意想不到的收获!},拥有了它,从此让你可以轻松、灵活对待日常数据库数据管理处理工作。 还等什么?赶快与我联系13856992267、QQ:23807773要求试用或购买吧?价格联系时谈! 本系统还可以根据用户需求,增加共性功能。{感谢您的支持及来电来函提出您的宝贵建议,为本系统更加地完善,贡献出您的一份力量!}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值