对象,则必须为用户授予对象的权限。
2 系统权限
系统权限指对数据库管理的操作以及对数据对象的操作(创建、修改、删除),其中sysdba和sysoper就是其中的两种。比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。
Oracle11g中含有200多种系统特权,所有的这些系统特权均被列举在SYSTEM_PRIVILEGE_MAP数据目录视图中。
常用的系统权限有:createsession create table create view create procedure
Create public synonym 建同义词 create trigger create cluster 建簇
2 显示系统权限
SQL> select * fromsystem_privilege_map order by name;
--显示所有系统权限,oracle 11g有208种。
2 授予系统权限
(1) 一般情况,授予系统权限是由DBA完成的。
(2) 如果用其他用户授予系统权限,则要求该用户必须具有grant any privilege的系统权限。
(3) 可以带有with admin option选项,这样被授予权限的用户或角色还可以将该系统权限授予其它用户或角色。
2 举例
(1) 创建两个用户ken, dell和tom,并指定密码。初始阶段它们没有任何权限。
Create user ken identified by ken;
Create user dell identified by dell;
Create user tom identified by tom;
(2) 给ken和dell授予createsession和create table权限时带with admin option;授予createview时不带with admin option。
Grant create session, create table token, dell with admin option;
Grant create view to ken;
(3) 通过ken给tom授权。
Grant create session, create table totom;
2 回收系统权限
(1) 一般情况下,回收系统权限是DBA完成的。
(2) 如果其它用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。Ken、dell都可以回收tom的权利。
(3) 注意:系统权限级联收回的问题-----不是级联回收。
Revoke create session from ken; --tom仍可以连接
2 对象权限介绍
对象权限指对数据对象的操作(select,update,insert,delete)
(1) 指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。
(2) 常用的有 alter delete select insert update index
references引用
execute执行:如果用户想要执行其它方案的包/过程/函数,则须有execute权限。
(3) Selectdistinct privilege from dba_tab_privs; --dba查看oracle提供的所有的对象权限
2 授予对象权限
(1) 在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它用户来操作,则需要用户具有相应的(with grant option)权限。
(2) 从oracle9i开始,sys和system可以将任何对象上的对象权限授予其它用户。
2 回收对象权限――级联回收
2 查询用户与权限
用户被授予的系统权限和对象权限都被记录在Oracle数据字典中,了解某个用户被授予哪些系统权限和对象权限是确保应用系统安全的重要工作。Oracle 11g用于存放用户、系统权限、对象权限有关的数据字典如下:
| 数据字典表 |
说明 |
| DBA_USERS |
存储数据库用户基本信息表 |
| DBA_SYS_PRIVS |
存储用户或角色的系统权限 |
| DBA_TAB_PRIVS |
存储用户的对象权限 |
| USER_SYS_PRIVS |
存储登陆用户的系统权限 |
| ROLE_SYS_PRIVS |
存储登陆用户的角色信息 |
| ALL_TABLES |
存储登陆用户可以查询的基本表信息 |
| USER_TAB_PRIVS |
存储登陆用户将哪些基本表权限授予哪些用户的信息 |
| ALL_TAB_PRIVS |
表示对象上的授权,用户是PUBLIC或被授予者或用户是属主 |
2 举例
select *from dba_role_privs where grantee='SCOTT'; --查询scott所拥有的角色
select * from dba_tab_privswhere grantee='DBA'; --一个角色包含的对象权限
6、角色管理
2 角色介绍
角色就是相关权限的命令集合。使用角色的主要目的就是为了简化权限的管理。包括:预定义角色和自定义角色。
2 预定义角色
预定义角色是指oracle所提供的角色,每种角色都用于执行一些特定的管理任务。常用的预定义角色connect,resource,dba。
--查询oracle中所有的角色(一般是DBA查看)
Select * from dba_roles;
其中,resource角色隐含了unlimited tablespace系统权限,即用户可以无限制的使用表空间。DBA角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system,但是dba角色不具备启动和关闭数据库的权限。
2 自定义角色
一般是由具有DBA角色的用户来建立,如果用别的用户来建立,则需要具有create role的系统权限。在建立角色时可以指定验证方式(不验证,数据库验证等)。
2 建立角色(不验证)
如果角色是公用的角色,可以采用不验证的方式建立角色。
Create role 角色名not identified;
2 建立角色(数据库验证)
采用这样的方式时,角色名、口令存放在数据库中。当激活该角色时,必须提供口令,在建立这种角色时,需要为其提供口令。
Create role 角色名identified by 口令
2 举例
Conn / as sysdba
Create role r1;
Create role r2 identified by r2;
Create role r3 identified by r3;
Create user u1 identified by u1;
Grant connect to r1;
Grant select on scott.emp to r2;
Grant insert on scott.emp to r3;
Grant r1, r2, r3 to u1;
Conn u1/u1
Select * from session_roles; --查看当前用户所有生效的角色
Set role r2 identified by r2,r3identified by r3; --使带有口令的角色生效
Select * from scott.emp;
Set role none; --使所有角色失效
Select * from session_roles;
2 补充:
以sys用户登陆Oracle,执行sele