引言:
当刚刚建立新用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种待定的数据库操作,则必须为其授予系统权限;如果用户要访问其它方案的对象,则必须为其授予对象权限。为了简化权限的管理,可以使用角色。
(1)角色:一个角色可以被授予系统权限,或者对象权限
oracle事先定义了若干角色,查看所有角色:
SQL> select * from dba_roles;
其中:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
可以查询sys_dbs,sys_privs可以了解各种角色拥有的权限
eg:
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
(2)权限:指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对象权限
A、系统权限:描述用户对数据库的相关权限,指执行特定类型sql命令的权利,它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table 权限时,可以在任何方案中建表。
常用的有:
create session 连接数据库 create table 建表
create procedure 建过程、函数、包
例如,CREATE TABLE权限允许用户创建表,GRANT ANY PRIVILEGE 权限允许用户授予任何系统权限。
查看用户系统权限:
SQL> select * from dba_sys_privs;
SQL> select * from all_sys_privs;
SQL> select * from user_sys_privs;
授予系统权限传递:
一般情况下,授予系统权限是有DBA完成的,如果用其它用户来授予系统权限,则要求该用户必须具有grant any privilege 的系统权限在授予系统权限时,可以带有with admin option 选项。
grant 系统权限 to 用户名 [with admin option].带上with子句,可以让该用户有权限把系统权限授予其他用户。
eg:system 给用户xiaoming 权限时:
grant connect to xiaoming with admin option//意味用户xiaoming可以把connect 权限传递下去
回收系统权限:
一般情况下,回收系统权限是DBA来完成的,如果其它的用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option),回收系统权限使用revoke来完成。
eg:
SQL> revoke create session from ***(用户) 级联回收
B、对象权限:用户对其他用户的数据对象访问/操作的权限,其中,数据对象指用户创建的表,视图、存储过程、触发器等。
常用的有:alter、delete、select、insert、update 等。
查看对象权限:通过数据字段视图可以显示用户或是角色所具有的对象杼,视图为dba_tab_privs。
eg:
SQL> conn system/manager
SQL> select distinct privilege from dba_tab_privs
eg:希望xiaoming用户可以去查看scott的emp表(对象权限)
sql>conn scott/sheng
sql>grant select on emp to xiaoming
希望xiaoming 用户去修改scott 的emp表
SQL> grant update on emp to xiaoming
希望xiaoming 用户去所有权限scott 的emp表
SQL> grant all on emp to xiaoming
授予对象权限传递:
如果是对象权限,就加入with grant option
grant select on emp to xiaoming with grant option //意味着xiaoming可以传递权限
回收权限revoke
scott 希望收回xiaoming对emp表的查询权限
revoke select on emp from xiaoming