接着上面谈到的有关oracle的connect的权限(文见http://blog.csdn.net/inthirties/archive/2009/08/04/4405639.aspx),其实,我们可以发现,虽然我们经常谈及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

---------- ---------------------------------------- ----------

-3 ALTER SYSTEM                                      0

-4 AUDIT SYSTEM                                      0

-5 CREATE SESSION                                    0

-6 ALTER SESSION                                     0

-7 RESTRICTED SESSION                                0

这里就是所有的内置的系统权限了,其实如果有开发过权限系统的经验的话,对这里的这个概念,可以理解为function permission,也就是你可以进行哪些操作。

这里特别提到一个另外的知识点,有网游朋友问过我,create any table和create table有什么区别,create table只能老老实实的给自己的scheam创建表,而不能以create table otherschema.tablename这样的方式给其他的schema创建表。额外提到这点,有很多朋友这块还是模糊的。

oracle通过数据字典表dba_sys_privs这个表来记录user被赋予的系统权限,比如

我们现在执行

SQL>grant select any table to test1; -- 把select any table的权限赋予test1这个用户

Grant succeeded

SQL> select * from dba_sys_privs where grantee = 'TEST1';

GRANTEE                        PRIVILEGE                                ADMIN_OPTION

------------------------------ ---------------------------------------- ------------

TEST1                          SELECT ANY TABLE                         NO

这里就可以查询到这个记录了。 admin_option表示的是是否有把当前这个系统权限grant给其他用户的意思。yes 表示test1除了自己有这个权限,还可以把这个权限赋予其他用户。N就是没有grant的权限了。

我们可以用一下语句试试

SQL> grant select any table to test1 with admin option;

Grant succeeded

在来看看刚才的记录

GRANTEE                        PRIVILEGE                                ADMIN_OPTION

------------------------------ ---------------------------------------- ------------

TEST1                          SELECT ANY TABLE                         YES

现在test1就可以赋予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的对象权限,其实不然,这里其他类型的对象的对象权限也会记录进来

实验一下。还是刚才的test1用户。我现在把对象dbms_xplan的execute的权限给他。dbms_xplan这个有些朋友可能不熟悉,这是执行计划有关的一个对象,朋友们如果没有安装执行计划的包。可以用dbms_output对象做实验

SQL>grant execute on dbms_xplan to test1;

SQL>grant execute on dbms_output to test1;

SQL> select * from dba_tab_privs where grantee = 'TEST1';

GRANTEE                        OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE                                GRANTABLE HIERARCHY

------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- ---------

TEST1                          SYS                            DBMS_XPLAN                     SYS                            EXECUTE                                  NO        NO

TEST1                          SYS                            DBMS_OUTPUT                    SYS                            EXECUTE

这里注意和fuanction 不同的,这里有一个GRANTABLE的字段,意味和上面admin option一样的作用

不过这里的sql不同了

SQL>grant execute on dbms_xplan to test1 with grant option;

这里是oracle里的权限了,

不过有的人可能会问道,咦,你是不是漏掉了,不是我们还可以

grant connect, resource, dba to username;吗,那她们都是什么权限呀。

在这里就要注意了,这里的connct resource dba都不是权限,而是一个role,角色,一个角色是1个或者多个系统权限或者对象权限的集合。 是便于我们管理用户赋权而演化而来的, 这里的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的赋予一个用户

比如

SQL>grant select_catalog_role to test1;

我们可以通过dba_role_privs来查询相关用户的role的赋予,比如

SQL> select * from dba_role_privs where grantee = 'TEST1';

GRANTEE                        GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE

------------------------------ ------------------------------ ------------ ------------

TEST1                          CONNECT                        NO           YES

TEST1                          RESOURCE                       NO           YES

TEST1                          PLUSTRACE                      NO           YES

TEST1                          SELECT_CATALOG_ROLE            NO           YES

这里有admin_option的选项和上面一样。

最后我们在来看看sysdba和sysoper,我们也可以在grant里指定这两个权限,但是他们并不是权限,也不能理解为角色,我这里个人把他们理解为身份,是登录数据库的一种身份,这样一说你是不是有影响了、我们总是有 sqlplus / as sysdab这样的使用,其实这里的sysdba是一种身份。

SQL>grant sysdba to test1;

SQL>grant sysoper to test1;

SQL> select * from V$pwfile_users where username = 'TEST1';

USERNAME                       SYSDBA SYSOPER

------------------------------ ------ -------

TEST1                          TRUE   TRUE

这里是通过动态视图V$pwfile_users来查的,和上面一些数据表不同,这个是一个动态视图,是从密码文件里读出来的。

以上就是个人对oracle的权限的总结。然后这里仅是一斑窥豹而已,oracle是个很系统的体系结构,我们只有从每个知识点深入进去,对每个知识点不纠其烦的仔细研究,才有可能能正真的认知到oracle的知识。这才是oracle的迷人之处。

经常谈到Oracle的权限,你究竟知道多少的更多相关文章

  1. oracle用户权限

    权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> ...

  2. Oracle 用户权限管理方法

    Oracle 用户权限管理方法 sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 sys;//系统管理员,拥有最 ...

  3. oracle 用户 权限

    一. 概述 与权限,角色相关的视图大概有下面这些: DBA_SYS_PRIVS: 查询某个用户所拥有的系统权限 USER_SYS_PRIVS:   当前用户所拥有的系统权限 SESSION_PRIVS ...

  4. Oracle管理监控之Oracle用户权限

    数据字典 1.动态数据字典是以v$xxx开始的数据字典,在数据库中约有150个左右,这些数据字典反映数据库动态运行状况,在不同时间查询会得到不同的结果. 2.DBA数据字典是以DBA_xxx表示,该数 ...

  5. Oracle用户权限及死锁

    Oracle用户权限表 oracle数据库中涉及到用户权限的三个表,dba_users,all_users,user_users有什么区别 dba_开头的是查全库所有的,all_开头的是查当前用户可以 ...

  6. [oracle] 系统权限管理

    1 利用超级用户连接到数据库登录 sqlplus / as sysdba or slqplus SYS/SYSPWD as sysdba 这两个命令的效果是一样的,都是以sysdba的身份使得SYS管 ...

  7. oracle数据库权限管理

    权限管理: oracle 9里面默认的三个username和password: sys change_on_install //权限最高的管理员 system manager //普通的管理员 sco ...

  8. oracle数据字典-权限-角色

    每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统sch ...

  9. Oracle 用户权限分配说明

    一般来说,Oracle普通用户创建后,不建议分配DBA权限.那么一般分配哪些权限呢? 首先来说,一个Oracle普通用户,我们一般性的要求是:   1.能够在本用户下进行本用户相关的创建表结构,数据维 ...

随机推荐

  1. C#利用WMI获取 远程计算机硬盘数据

    一.利用WMI获取 远程计算机硬盘数据,先引入"System.Management.dll"文件. /// <summary>        /// 获取存储服务器硬盘 ...

  2. portableDFS-可便携的分布式文件系统

    PPT下载(因附件大小有限制,删除了PPT中的隐藏页,如需完整版本,请转到it168文库下载):portableDFS-可便携的分布式文件系统.ppt 完整版本请上这里下载:http://wenku. ...

  3. 编写高质量代码改善C#程序的157个建议——建议61:避免在finally内撰写无效代码

    建议61:避免在finally内撰写无效代码 在阐述建议之前,需要先提出一个问题:是否存在一种打破try-finally执行顺序的情况,答案是:不存在(除非应用程序本身因为某些很少出现的特殊情况在tr ...

  4. Sharepoint 文档知识管理系统--Word在试图打开文件时遇到错误

    在系统开发中,遇到问题:SharePoint 2010与Office 2010安装在一台服务器上,当用Office打开SharePoint文档库中的文档时,遇到“Word在试图打开文件时遇到错误,请尝 ...

  5. JS判断键盘是否按的回车键并触发指定按钮点击操作

    document.onkeydown = function (e) { if (!e) e = window.event; if ((e.keyCode || e.which) == 13) { va ...

  6. .net core 结合nlog使用Elasticsearch , Logstash, Kibana

    什么是ELK ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一个FileBeat,它是一个轻量级的日志收集处理工具 ...

  7. Day3作业 .

    ,))::])]): :-])# 3,使用while和for循环分别打印字符串s=’asdfer’中每个元素. # 4,实现一个整数加法计算器:# 如:content = input(‘请输入内容:’ ...

  8. C# LINQ(3)

    我们还是接着讨论一下group by 这一章节讨论group的本质:分组. 分组之后进行存储或者查询. 这个时候就要用一个新的关键字:into 这个之后就group就不作为结尾了. 必须重写另起sel ...

  9. nginx理解与配置

    准备: http服务器:①tomcat②apache③nginx(c语言开发) 文件系统:①mgfs ②mgbd:存储小文件 ③fastDFS:存储大文件.小文件,分布式文件系统 nginx是一种ht ...

  10. pycharm 不显示代码提示

    1.检查是否代码本身有问题. 2.检查代码提示是否成功开启. 3.检查IDE省电模式是否关闭状态. 4.使用快捷键:ctrl+j.ctrl+space.alt+/ 其他(不能安装): 1.检查是否Py ...