系统权限介绍
系统权限是指执行特定类型sql命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表。当用户具有create any table权限时,可以在任何方案中建表。
显示系统权限
命令:select * from system_privilege_map order by name;
授予系统权限
一般情况下,授予系统权限是由dba完成的,如果用其他用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限。在授予系统权限时,可以带有with admin option选项,这样,被授予权限的用户或是角色还可以将该系统权限授予其他的用户或是角色。
1.创建两个用户ken,tom初始阶段他们没有任何权限,如果登陆就会给出错误信息。
create user 用户名 identified by 用户密码;
2.给用户ken授权。
grant create session,create table to ken with admin option;
grant create view to ken;
回收系统权限
一般情况下,回收系统权限是dba来完成的,如果其他用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成。
当回收了系统权限后,用户就不能执行相应的操作了,注意,系统权限不会级联回收。
命令:revoke create session from ken;
对象权限介绍
指访问其他模式用户对象的权限,用户可以直接访问当前模式用户的对象,但是如果要访问别的模式用户的对象,则必须具有对象的权限。
比如Smith用户要访问scott.emp表(scott用户,emp表)。
则必须在scott.emp表上具有对象的权限。
常用的有:
alter 修改 delete 删除 select 查询 insert 添加
update 修改 index 索引 reference 引用 execute 执行
显示对象权限
通过数据字典视图可以显示用户或是角色所具有的对象权限,视图为dba_tab_privs。
命令:select distinct privilege from dba_tab_privs;
结果:
授予对象权限
sys,system可以将任何模式用户上的对象权限授予其他用户,授予对象权限是用grant命令来完成的。
对象权限可以授予用户,角色和public。在授予权限时,如果带有wiht grant option选项,则可以将该权限转授给其他用户。但是要注意,wiht grant option选项不能被授予角色。
案例:将emp表的查询权限授予某个用户。
命令:grant select on emp to 用户名;
案例:将对emp表的所有操作权限授予某个用户。
命令:grant all on emp to 用户名;
案例:能否对用户的访问权限更加精细控制(授予列权限),希望用户只可以修改emp表的sal字段。
命令:grant update on emp(sal) to 用户名;
案例:授予index权限。
命令:grant index on scott.emp to 用户名;
回收对象权限
在oracle9i后,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成。
这里要说明的是,收回对象权限后,用户就不能执行相应的sql命令,但是要注意的是对象的权限会被级联回收。
dba角色
dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system他们可以将任何系统权限授予其它用户。但是要注意的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)。