Oracle数据库是一种大型关系型的数据库我们知道当使用一个数据库时仅仅能够控制哪些人可以访问数据库哪些人不能访问数据库是无法满足数据库访问控制的DBA需要通过一种机制来限制用户可以做什么不能做什么这在Oracle中可以通过为用户设置权限来实现权限就是用户可以执行某种操作的权利而角色是为了方便DBA管理权限而引入的一个概念它实际上是一个命名的权限集合
权限
Oracle数据库有两种途径获得权限它们分别为
① DBA直接向用户授予权限
② DBA将权限授予角色(一个命名的包含多个权限的集合)然后再将角色授予一个或多个用户
使用角色能够更加方便和高效地对权限进行管理所以DBA应该习惯于使用角色向用户进行授予权限而不是直接向用户授予权限
Oracle中的权限可以分为两类
?系统权限
?对象权限
系统权限
系统权限是在数据库中执行某种操作或者针对某一类的对象执行某种操作的权利例如在数据库中创建表空间的权利或者在任何模式中创建表的权利这些都属于系统权限在Oraclei中一共提供了多种权限
系统权限的权利很大通常情况下
① 只有DBA才应当拥有alter database系统权限该权限允许用户对数据库物理结构和可用性进行修改
② 应用程序开发者一般应该拥有Create TableCreate View和Create Type等系统权限用于创建支持前端的数据库模式对象
③ 普通用户一般只具有Create session系统权限(可以通过Connection角色获得)只有Create Session系统权限的用户才能连接到数据库
④ 只有具有Grant Any PRivilege系统权限用户或者获取了具有With Admin Option选项的系统权限的用户才能够成为其它用户授予权限
对象权限
对象权限是针对某个特定的模式对象执行操作的权利只能针对模式对象来设置和管理对象权限
对于模式对象表视图序列存储过程存储函数包都可以对象设置权限不同类型模式对象具有不同的对象权限比如表视图等对象具有查询(Select)修改(Update)删除(Delete)等对象权限而存储过程存储函数等对象则具有执行(Execute)等对象权限
但是并不是所有的模式对象都可以设置对象权限比如簇索引触发器以及数据库链接等模式就不具有对象权限这些模式对象的访问控制是通过相应的系统权限来实现的比如要对索引进行修改必须拥有Alter Any Index系统权限
用户自动拥有他的模式中所有对象的全部对象权限他可以将这些对象权限授予其他的用户或角色比如Test用户创建了一个表Table在没有授权的情况下用户Test不能查询修改删除这个表如果Test将ETP表的Select对象权限授予了Test则该用户就可以查询 Table表了如果在为其它用户授予对象权限时用了With Grant Option选项被授予权限的用户还可以将这个权限在授予其他用户
角色
角色的概念
角色就是多个相关权限的命名集合通过角色来进行对用户授予权限可以大大简化DBA的工作量比如处于统一部门中的多个用户都需要访问数据库中的一系列表DBA可以将这些表的中合适的对象权限授予一个角色然后在把这个角色授予这些用户这样进行操作要比为没有用户进行授权要便捷多了而且要对这些用户的权限进行统一修改只需要修改角色的权限即可
角色的优点
通过角色为用户授予权限而不是直接向各个用户授权具有以下优点
?简化权限管理 DBA将用户群分类然后为每一类用户创建角色并将该角色授予这类用户所需要的权限最后在将改角色授予该类中的各个用户这样不仅简化了授权操作而且当这类用户的权限需求发生改变时只需要把角色的权限进行改动而不必修改每一位用户的权限
?动态权限管理 角色可以被禁用或激活当角色被禁止使用时拥有该角色的用户不再拥有授予改角色的权限了这样就可以对多个用户的权限进行动态控制了
?灵活的编程能力 角色是存储在数据字典中的并且可以为角色设置口令这样就能够在应用程序中对角色进行控制比如禁用或者激活等操作
下面以Oraclei为例给出具体的实现用户授权
()设定各种角色及其权限
CREATE ROLE checkerrole DENTIFIEDBYxm;
CREATE ROLE defaultrole IDENTIFIEDBYdefaultrole;
GRANT SELECTUPDATE ON
accountpaytable TO checkerrole;
GRANT CONNECT TO defaultrole;
()创建用户
CREATE USER xiaoli IDENTIFIEDBY xiaoli;
()授权
GRANT checkerrole TO xiaoli;
GRANT defaultrole TO xiaoli;
()设定用户缺省的角色
ALTER USER xiaoli DEFAULTROLE defaultrole;
()注册过程
CONNECT xiaoli/xiaoli@oracle
此时用户只有其缺省角色的权限
()激活角色
SET ROLE checkerrole IDENTIFIEDBY xm;
—操作成功后xiaoli拥有checkerrole的权限
—这里的角色和口令是固定的在应用系统中可以由应用管理人员自行设置则更为方便安全