ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 详解oracle用户创建(create user)(下)

详解oracle用户创建(create user)(下)

原创 Linux操作系统 作者:pingley 时间:2012-02-11 17:16:02 0 删除 编辑
详解oracle用户创建(create user)(下)
      用户创建完成以后,如果不授予一定的特权,什么也做不了,包括登录到数据库与数据库建立会话。简单的创建一个用户,授予登录的密码很简单,但是要创建符合实际要求的用户,比较复杂一些,用户的创建涉及到表空间的选择与空间配额,profile,权限的授予,账户的安全等方面。
      特权的授予是用户创建过程中一个很重要的组成部分,关系到用户能否有足够的权限去完成所要做的工作,又确保用户的权限不会过高,滥用特权, 成为一个安全问题。

oracle中的特权分为两种:
系统特权(system privilege):允许用户执行某种操作,该操作会影响数据字典。影响整个数据库。
对象特权(object privilege):允许用户执行某种操作,该操作影响的是schema中的数据。
常用的系统特权有:
create session
restricted session
alter database
alter system
create tablespace
create table
create any table
drop any table
insert any table
update any table
delete any table
select any table
grant any object privilege

系统特权授予与回收的语法格式:
grant systemprivilege [, systemprivilege, …]
to username|rolename [, username|rolename, …]
[with admin option];

revoke systemprivilege [,… systemprivilege]
from username|rolename;

用户oracleusr只拥有create session特权,下面我们在给他授予create any table 特权。
SQL> grant create any table to oracleusr;
Grant succeeded
SQL> conn oracleusr
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as oracleusr@ORACL
SQL> create table testtable (id char(5),name varchar2(20));
Table created
SQL> alter table testtable modify (name varchar2(15));
Table altered
SQL> insert into testtable values('00001','smith');
1 row inserted
SQL> update testtable 
  2  set name='jone'
  3  where id='00001';
1 row updated
SQL> select * from testtable;
ID    NAME
----- --------------------
00001 jone
SQL> delete from testtable;
1 row deleted
SQL> create index testtable_id_idx on testtable(id);
Index created
SQL> drop index testtable_id_idx;
Index dropped
SQL> drop table testtable;
Table dropped
从上面的演示可以看出一个create any table 特权的权限范围真大,可以允许执行很多操作。

SQL> create table hr.test (id char(5),name varchar2(20));
Table created
SQL> drop table hr.test;
drop table hr.test
ORA-01031: 权限不足
SQL> insert into hr.test values('00001','smith');
insert into hr.test values('00001','smith')
ORA-01031: 权限不足
SQL> select * from hr.test;
select * from hr.test
ORA-01031: 权限不足
在别的模式中特权的范围又是不同了,所有在授权的时候,务必清楚的一点是,用户权限的需求
与对特权的了解。就像上面一个简单的create any table 并不简单。

给oracleusr增加select any table 特权.
SQL> grant select any table to oracleusr;
Grant succeeded
SQL> conn oracleusr
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as oracleusr@ORACL
SQL> select first_name,last_name
  2  from hr.employees
  3  where employee_id='100';
FIRST_NAME           LAST_NAME
-------------------- -------------------------
Steven               King
查看hr中的表。ok。
SQL> select * from sys.dba_users;
select * from sys.dba_users
ORA-00942: 表或视图不存在
但是sys模式下的表不行了,oracle对select any table 做了一定的限制,保护sys模式中的信息。

从上面的两个特权create any table,select any table 可以见识到带any特权的威力,所以在授予特权以前必须对特权有足够的了解。对带any的特权要小心授予。可以依据授予某个用户的系统特权可以查询dba_sys_privs数据字典。

SQL> select * from dba_sys_privs
  2  where grantee='ORACLEUSR';
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLEUSR                      SELECT ANY TABLE                         NO
ORACLEUSR                      CREATE SESSION                           NO
ORACLEUSR 
                     CREATE ANY TABLE                         NO
SQL> grant create tablespace to oracleusr with admin option;
Grant succeeded
with admin option 可使用户将相应的系统特权再授予别人。并且在revoke的时候相应的系统特权是不会级联收回的.
SQL> conn oracleusr
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as oracleusr@ORACL AS SYSDBA
SQL> grant create tablespace to hr;
Grant succeeded

SQL> select * from dba_sys_privs
  2  where grantee='ORACLEUSR';
 
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLEUSR                      SELECT ANY TABLE                         NO
ORACLEUSR                      CREATE TABLESPACE                        YES
ORACLEUSR                      CREATE SESSION                           NO
ORACLEUSR                      CREATE ANY TABLE                         NO
从查询中可以看出create tablespace 的admin_option项是yes的.

SQL> revoke create tablespace from oracleusr;
Revoke succeeded
SQL> select * from dba_sys_privs
  2  where grantee='ORACLEUSR';
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLEUSR                      SELECT ANY TABLE                         NO
ORACLEUSR                      CREATE SESSION                           NO
ORACLEUSR                      CREATE ANY TABLE                         NO
create tablespace特权被回收了。

SQL> select * from dba_sys_privs
  2  where grantee='HR';
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
HR                             CREATE VIEW                              NO
HR                             UNLIMITED TABLESPACE                     NO
HR                             CREATE DATABASE LINK                     NO
HR                             CREATE SEQUENCE                          NO
HR                             CREATE TABLESPACE                        NO
HR                             CREATE SESSION                           NO
HR                             ALTER SESSION                            NO
HR                             CREATE SYNONYM                           NO
由oracleusr授予hr的create tablespace特权并没有被级联收回.

对象特权授予的语法格式:
grant {objectprivilege|all} [(columnname),
objectprivilege (columnname)]
on objectname
to {username|rolename|public}
[with grant option];
all:关键字表示所有的对象特权.
On:后面接对象名.
with grant option:与with admin option类似,用户可以把对获得的相应对象特权授予其他用户。
revoke objectprivilege [,… objectprivilege]
on objectname
from username|rolename;

常用对象特权:
select:允许展现表,视图,序列的信息,还包括使用nextval产生下一个序列值。
insert:允许用户对表,视图进行插入操作。
update:允许用户更新表,视图中的数据。
delete:允许用户删除一个表或者视图。
index:允许用户创建一个索引。
alter:允许用户修改表或者序列的定义。
references:在创建一个外键约束的时候,允许用户参照一张表。该特权只能授予用户,不能授予角色。
execute:允许用户执行一个存储函数或者过程.

SQL> revoke select any table from oracleusr;
Revoke succeeded
SQL> grant select on hr.employees to oracleusr with grant option;
Grant succeeded
在回收oracleusr在hr的表employees上的select权限的时候,oracleusr授予oracle11g的相同的
权限也被一起回收了,这一点不同于with admin option。
SQL> conn oracleusr
输入口令:
已连接。
SQL> select count(*) from hr.employees;
  COUNT(*)
----------
       107
SQL> grant select on hr.employees to oracle11g;
授权成功。
SQL> conn oracle11g
输入口令:
已连接。
SQL> select count(*) from hr.employees;
  COUNT(*)
----------
       107
SQL> conn system as sysdba
输入口令:
已连接。
SQL> revoke select on hr.employees from oracleusr;
撤销成功。

SQL> conn oracleusr
输入口令:
已连接。
SQL> select count(*) from hr.employees;
select count(*) from hr.employees
                        *
第 1 行出现错误:
ORA-01031: 权限不足
SQL> conn oracle11g
输入口令:
已连接。
SQL> select count(*) from hr.employees;
select count(*) from hr.employees
                      *
第 1 行出现错误:
ORA-00942: 表或视图不存在
oracle11g从oracleusr中获得的对象特权被级联回收了。

另外在权限的授予中角色(role)很重要,一般不直接给用户授予特权,而是想将需要的特权授予角色,然后将角色分配给用户。
角色:就是一组特权的代表。
角色相关的语法格式:
创建角色:
create role rolename;
分配与回收角色:
grant rolename [, rolename]
to username [, username];
revoke rolename
from username|rolename;
删除角色;
drop role rolename;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-716071/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    717403