`
adm889486
  • 浏览: 37175 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
社区版块
存档分类
最新评论

Oracle 用户权限管理(转)

阅读更多
1.ORACLE数据库安全策略

建立系统级的安全保证
系统级特权是通过授予用户系统级的权利来实现,系统级的权利(系统特权)包括:建立表空间、建立用户、修改用户的权利、删除用户等。系统特权可授予用户,也可以随时回收。ORACLE系统特权有80多种。

建立对象级的安全保证
对象级特权通过授予用户对数据库中特定的表、视图、序列等进行操作(查询、增、删改)的权利来实现。

建立用户级的安全保证
用户级安全保障通过用户口令和角色机制(一组权利)来实现。引入角色机制的目的是简化对用户的授权与管理。做法是把用户按照其功能分组,为每个用户建立角色,然后把角色分配给用户,具有同样角色的用户有相同的特权。

1.1用户管理
ORACLE用户管理的内容主要包括用户的建立、修改和删除
创建
create user jxzy;//创建用户
CREATE USER jxzy IDENTIFIED BY jxzy_pwd;//创建用户及密码
CREATE USER jxzy IDENTIFIED BY jxzy_password DEFAULT TABLESPACE system QUATA 5M ON system; //供用户使用的最大空间限额?
修改
alert user jxzy identified by tiger;//修改密码 
alter user scott identified by tiger;//修改系统默认的添加的scott用户密码 
删除
DROP USER jxzy//删除用户
DROP USER jxzy CASCADE; //删除用户,同时删除其建立的实体 

1.2系统特权管理与控制
ORACLE 提供了80多种系统特权,其中每一个系统特权允许用户执行一个或一类数据库操作。
授予系统特权
GRANT CREATE USER,ALTER USER,DROP USER TO jxzy WITH ADMIN OPTION;
//WITH ADMIN OPTION 这个选项表示该用户可以将此系统权限授权给其他用户

回收系统特权
REVOKE CREATE USER,ALTER USER,DROP USER FROM jxzy;

查看授予
SELECT * FROM sys.dba_sys_privs;//查看当前用户所有权限
select * from sys.user_tab_privs;//查看所用用户对表的权限 


1.3 对象特权管理与控制
    ORACLE对象特权指用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查看、执行(存储过程)、引用(其它表字段作为外键)、索引等。

授予对象特权
GRANT SELECT,INSERT(office_num,office_name),UPDATE(desc)ON office_organization TO new_adminidtrator WITH GRANT OPTION;
//WITH GRANT OPTION这个选项表示该用户可以将此对象权限授权给其他用户

 级联授权
GRANT ALL ON office_organization TO new_administrator

回收对象特权
REVOKE UPDATE ON office_orgaization FROM new_administrator

有级联回收功能
REVOKE ALL ON office_organization FROM new_administrator

显示已被授予的全部对象特权
SELECT * FROM sys.dba_tab_privs

1.4角色的管理
    ORACLE的角色是命名的相关特权组(包括系统特权与对象特权),ORACLE用它来简化特权管理,可把它授予用户或其它角色。

ORACLE数据库系统预先定义了CONNECT 、RESOURCE、 DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五个角色。CONNECT具有创建表、视图、序列等特权;RESOURCE具有创建过程、触发器、表、序列等特权、DBA具有全部系统特权;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出与装入数据库的特权。

通过查询sys.dba_sys_privs可以了解每种角色拥有的权利。


授予用户角色
GRANT DBA TO new_administractor WITH GRANT OPTION;

默认的普通用户scott默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限

/*管理员授权*/ 
grant create session to zhangsan;//授予zhangsan用户创建session的权限,即登陆权限 
grant unlimited session to zhangsan;//授予zhangsan用户使用表空间的权限 
grant create table to zhangsan;//授予创建表的权限 
grante drop table to zhangsan;//授予删除表的权限 
grant insert table to zhangsan;//插入表的权限 
grant update table to zhangsan;//修改表的权限 
grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public) 


oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权

/*oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的*/ 
grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限 
grant drop on tablename to zhangsan;//授予删除表的权限 
grant insert on tablename to zhangsan;//授予插入的权限 
grant update on tablename to zhangsan;//授予修改表的权限 
grant insert(id) on tablename to zhangsan; 
grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update 
grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限 



角色即权限的集合,可以把一个角色授予给用户 

create role myrole;//创建角色 
grant create session to myrole;//将创建session的权限授予myrole 
grant myrole to zhangsan;//授予zhangsan用户myrole的角色 
drop role myrole;删除角色 
/*但是有些权限是不能授予给角色的,比如unlimited tablespace和any关键字*/ 


Oracle 的用户根据所被授予的权限分为系统权限和对象权限。其中最高的权限是sysdba。 Sysdba具有控制Oracle一切行为的特权,诸如创建、启动、关闭、恢复数据库,使数据库归档/非归档,备份表空间等关键性的动作只能通过具有sysdba权限的用户来执行。这些任务即使是普通DBA角色也不行。Sysoper是一个与sysdba相似的权限,只不过比sysdba少了SYSOPER privileges WITH ADMIN OPTION,CREATE DATABASE,RECOVER DATABASE UNTIL这几个权限而已。这两者的认证方式是相同的办法,所以下面只介绍sysdba的认证管理。

  一般对sysdba的管理有两种方式: *** 作系统认证和密码文件认证。具体选择那一种认证方式取决于:你是想在Oracle运行的机器上维护数据库,还是在一台机器上管理分布于不同机器上的所有的Oracle数据库。若选择在本机维护数据库,则选择 *** 作系统认证可能是一个简单易行的办法;若有好多数据库,想进行集中管理,则可以选择password文件认证方式。
  下图比较直观的说明了这个选择权衡过程:
  
  使用 *** 作系统认证方式的配置过程:
  1. 在 *** 作系统中建立一个合法帐户。
  具体来说,在NT上,首先建立一个本地用户组,取名为ORA__DBA,其中SID为该数据库实例的SID,或者建立一个ORA_DBA地组,该组不对应于任何一个单独的Oracle实例。这样当一个NT上有好几个Oracle实例时,不用分别管理。然后再NT上建立一个用户,并且把它归入该组中。但是实际上这两步在Oracle8I安装过程中已经自动完成了,一般不用手动进行。
  第三步:在sqlnet.ora(位于$ORACLE_HOME/NETWORK/ADMIN目录中)中,把SQLNET.AUTHENTICATION _ SERVICES 设置为SQLNET.AUTHENTICATION_SERVICES= (NTS),意思为使用NT认证方式。
  第四步,在INIT.ORA中,把REMOTE_LOGIN_PASSWORD设置为NONE,意思是不用password认证方式。
  完成以上步骤后,就可以在登录到NT后,直接在SQL*Plus 和SERVER MANAGER中CONNECT INTERNAL (CONNECT / AS SYSDBA)来作为超级用户登录到Oracle中,执行一些只有超级用户才能进行的 *** 作。
  在Unix下,情况有些不同。毕竟这是两个完全不同的 *** 作系统。
  首先,在安装Oracle之前,建立一个DBA组,这一步不用说了,不然是装不上Oracle的。一般还建立一个名为Oracle的用户,并把它加入到DBA组中。
  第二步, 设置REMOTE_LOGIN_PASSWORD为NONE。在Oracle8.1以后,该参数默认为EXCLUSIVE。一定要记得改过来。
  第三步, 用该用户名登录Unix,运行SQL*Plus 或者SERVER MANAGER,输入以下命令:CONNECT INTERNAL (CONNECT / AS SYSDBA)来登录到Oracle中。

  使用password文件认证的具体步骤:
  Oracle提供orapwd实用程序来创建password 文件,运用orapwd建立该认证方式的具体步骤如下:
  1. 使用Orapwd实用程序来创建一个PASSWORD文件。语法:
   orapwd file=文件名 password=internal用户密码 entried=entries.
  详细解释:
   文件名要包含完整的全路径名,如果不指定,Oracle把它默认放置$ORACLE_HOME/dbs(Unix下)或者$ORACLE_HOME/DATABASE(NT下)下。
  用户密码是用户internal的密码。当然后来还可以再向里边加入别的超级用户。
  Entries表示最大允许有的超级用户数目。这个是一个可选的。前两者是必须指定的。一般会把它设置的比实际需要大一些,以免不够。

  2. 把INIT.ORA中REMOTE_LOGIN_PASSWORD设置为EXCLUSIVE 或SHARED.使用EXCLUSIVE表示只有当前INSTANCE使用这个password文件。而且允许有别的用户作为sysdba登录进系统里边,而若选择了SHARED,则表明不止一个实例使用这个密码文件,伴随着一个很强的约束:sysdba权限只能授予sys和internal这两个用户名。(其实internal不是一个实际用户,而只是sys作为sysdba登录时的一个别名。)
  同时还要记得把sqlnet.ora文件中SQLNET.AUTHENTICATION _SERVICES设置为NONE。一般在Unix下它是默认设置。在NT下,若选择典型安装时,会使用OS认证,而自定义时会使用密码文件认证方式。在安装过程中会提示输入INTERNAL密码。这样的话,就不用在手工创建密码文件和设定INTERNAL的密码了。

  3. 用SQL*Plus 或SERVER MANAGER运行下面命令登录进系统:CONNECT INTERNAL/密码。


  注意点:
  1.在Oracle8.1.6安装在WIN2000下创建数据库时,常常会发生凭证检索失败的错误。这是由于Oracle不能应用OS认证的结果。一般可以通过修改sqlnet.ora中SQLNET.AUTHENTICATION _SERVICES为NONE来解决。这时,Oracle将采用密码文件认证方式。
  2.由于Oracle有几个系统预建的用户,所以最好在安装完成以后马上改变这些用户的密码。系统默认得密码分别为:internal/oracle , sys/change_on_install, system/manager.

  3.当选择密码文件认证方式时,可以再向系统中加入其他超级用户。比如用以下语句把用户SCOTT加入超级用户之中:(由具有sysdba权限的人执行)
  SQL>GRANT SYSDBA TO SCOTT;这样SCOTT用户就具有了sysdba权限。注意,此时SCOTT用户可以以两种身份登录:SCOTT , SYS.当SCOTT在登录时没有输入AS SYSDBA时,SCOTT是作为普通用户登录的。而当登录时输入了AS SYSDBA时,此时SCOTT登录进去的用户实际上为sys。

  4. 当前系统中的具有sysdba权限的用户名可以从数据字典视图v$pwfile_user中查询得到:
SELECT * FROM V$PWFILE_USERS; 如上图所示。
  5. 系统中最大的具有sysdba权限的用户数由创建密码文件时的ENTRIES参数决定。当需要创建更多的具有sysdba权限的用户时,就需要删除原有的密码文件,重新创建一个。这需要关闭数据库,删除密码文件,重新创建一个新的密码文件,在entries中输入足够大的数目。再启动Oracle。这时,所有原来北授权的超级用户都不再存在,需要重新授权。所以在重新创建密码文件前,先要查询该视图,记下用户名,再在创建完密码文件后重新授权。
  6. Internal用户密码忘记的处理方法:
  有两种办法:
  1. ALTER USER SYS IDENTIFIED BY 新密码;//这同时也改变了Internal的密码,在Oracle8I中通过
  2. 重新创建一个新的密码文件,指定一个新的密码。





系统用户
sys;//系统管理员,拥有最高权限 
system;//本地管理员,次高权限 
scott;//普通用户,密码默认为tiger,默认未解锁 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics