Oracle知识整理(二)如何分配权限和角色

来源:互联网 发布:百度知道评论软件 编辑:程序博客网 时间:2024/05/29 08:33

1.什么是权限,什么是角色?

   权限分为系统权限和对象权限。系统权限是指执行特定类型sql命令的的权利。比如用户具有了create table的权限,可以在其方案中建表;当具有了create any table,可以在任何方案中建表。对象权限是指访问其他方案的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。比如Scott用户要访问Jane.emp表(Jane方案,emp表),则必须在Jane.emp表上具有对象权限。

  角色是相关权限的命令集合,使用角色的目的主要是为了简化权限的管理。

2.常用的权限和角色分类

  这里我们只简单介绍最常用的即可,若想了解可查阅帮助文档也可通过查询语句获得。

  a.系统权限:关于数据库连接(database link)、会话(session)、用户(User)、表空间(tablespace)、角色(role)、数据对象(表、视图、存储过程)等这些操作的create、drop和alter。

  b.对象权限:insert --添加 、delete --删除 (数据)、 Alter --修改(修改表结构) 、Update --修改(更新数据) 、Select --查询 。也就是增删改查四大类。

  c.角色分为预定义和自定义两种。预定义是指Oracle所提供的角色,常用的包括:connect,resource,dba. 

    dba角色具有所有的系统权限,默认的有dba角色的用户是sys和system。 这两个用户可以将任何系统权限授予其他用户。注意一点就是:dba角色没有启动关闭数据库的权利.Connect角色具有一般开发人员需要的大部分权限,多数情况下,只要给用户授权connect和resource角色就够了。那么connect和resource角色都有什么权限呢?这里没有必要一一列举。我们可通过查询获得。那么如何查询呢?

3.查询

如何查询Oracle有多少种角色? select * from dba_roles;

如何查询Oracle有多少种系统权限和对象权限? select * from system_privilege_map order by name; select  distinct privilege  from dba_tab_privs;

如何查看某个用户有什么样的角色?  select * from dba_role_privs where grantee='用户名';

如何查看一个角色包括什么系统权限和对象权限? select * from dba_sys_privs where grantee='角色名'; select * from dba_tab_privs where grantee='角色名';

4.授予和回收

   这部分知识在学习过程中是按一条一条规则来的,学完觉得特别乱。我把这里的东西按照一个正常的操作过程编成了一条操作线。感觉知识比较清晰了。

   a.现在我要使用Oracle,必须要有用户才行。Oracle默认创建两个用户sys和system.我们可以使用这两个用户登录上去,建立自己的用户,如:create user Ken identified by ken.现在我们使用Ken来登录会给出错误信息。为什么?因为Ken用户没有登录的权限。现在我们需要给Ken授权:grant create session  to Ken  with admin option.这样Ken用户登录就ok了。那么with admin option能起到什么作用?这说明被授权的用户或者是角色还可以将该系统权限给其他用户或者角色。

    回收系统权限操作:依然采用上面的例子:回收登录权限:revoke  create session  from Ken;  系统权限的回收不是级联的。比如:Ken又将登录权限授予Jane,那么回收Ken的权限后,Jane依然可以登录。

    b.对于对象权限来说,我们举个例子:如果我的方案中有一张表emp,现在我想让Ken用户有权限来操作我的表。那我怎么办?第一种办法是用dba用户将操作我的表emp的权限给Ken,这里需要说明一点:dba用户可以将任何对象上的对象权限授予其他用户。第二种办法是我自己来做。  如何做? grant select on emp to Ken with grant option.这里我用到了 with grant option.这能起到这样的作用:Ken用户可以将操作我的表emp的权限在授予别的用户。这里注意一点。它跟with admin option 不同,with grant option只能授予用户,不能授予角色。

    回收对象权限操作:revoke select on emp from Ken ;对象权限的回收是级联的。比如:Ken将对emp表查询的权限授予Jane,那么回收Ken的权限后,Jane也不能对emp表进行查询。

    c.角色授权这里需要两步:1给角色授权2将角色给某一个用户。现在我们将登录权限给一个角色:grant  create session  to 角色名;然后把这个角色给用户Ken:grant 角色名 to Ken.删除角色采用 drop role 角色名。


   这是我对Oracle权限和角色的知识整理,包括它们是什么,分类以及如何去用它们。这里我们要搞明白一个前提就很好理解:我们要做某一件事必须要有权限。当我们没有权限的时候可以使用系统用户去做,如果系统授予我们权限那我们也可以做了。下面一篇博客写如何使用pl/sql编程。

1 0