分享

详解如何实现Oracle修改用户权限 - Oracle - 数据库 - TechWeb-技...

 叶非常 2011-03-07

[转贴] 详解如何实现Oracle修改用户权限

这里将介绍Oracle修改用户权限的实现过程,包括一些权限管理方面的东西。希望通过本文能对大家了解Oracle修改用户权限有所帮助。, @3 p6 d. R! c" S9 \
ORACLE数据库用户与权限管理; }/ g4 s: f8 u, K8 N
ORACLE是多用户系统,它允许许多用户共享系统资源。为了保证数据库系统的安全,数据库管理系统配置了良好的安全机制。
* h' W, o! O: {+ u# @2. 1 ORACLE数据库安全策略- J" J) g. J2 G% I  J' b0 |
建立系统级的安全保证 7 V0 `; ]7 _& j/ ~% Q1 c9 Z# U
系统级特权是通过授予用户系统级的权利来实现,系统级的权利(系统特权)包括:建立表空间、建立用户、修改用户的权利、删除用户等。系统特权可授予用户,也可以随时回收。ORACLE系统特权有80多种。
4 E6 r* |9 @9 C. M0 ]8 n" Z建立对象级的安全保证
% Q5 Y7 E% {% \! z, |9 V$ s对象级特权通过授予用户对数据库中特定的表、视图、序列等进行操作(查询、增、删改)的权利来实现。3 F3 H. g1 z% z) ^8 C! J: v
建立用户级的安全保证
5 x" b) w- U: E' ?3 Z用户级安全保障通过用户口令和角色机制(一组权利)来实现。引入角色机制的目的是简化对用户的授权与管理。做法是把用户按照其功能分组,为每个用户建立角色,然后把角色分配给用户,具有同样角色的用户有相同的特权。
* m' {% B6 Q4 v9 U2.2 用户管理
9 k  I& X" X6 v5 W" K: k$ v# X; kORACLE用户管理的内容主要包括用户的建立、修改和删除) K8 O8 b* Q0 l
用户的建立 " y( D& d+ l0 C( Y5 u" N
  • SQL>CREATE# f; U# E  X; K. O6 n; W
    USER jxzy  
  • >IDENTIFIED BY jxzy_password  
  • >DEFAULT TABLESPACE system  
  • >QUATA 5M ON system; //供用户使用的最大空间限额
Oracle修改用户权限 2 B; K. Z# ?* C  @; h( A
  • SQL>CREATE' ]2 A. `$ ^0 v( ~
    USER jxzy  
  • >IDENTIFIED BY jxzy_pw  
  • >QUATA 10M ON system;
删除用户及其所建对象
) u  M8 u/ K! M. ]+ R
  • SQL>DROP
    ( G# e  S( g1 k5 V. PUSER jxzy CASCADE; //同时删除其建立的实体
2.3系统特权管理与控制
  z9 [) A) ~8 {4 `ORACLE 提供了80多种系统特权,其中每一个系统特权允许用户执行一个或一类数据库操作。
; [% G" t5 K3 e* a5 V! f1 p授予系统特权
+ _( c" _- J+ t0 K7 D/ C1 z
  • SQL>GRANT
    ' [( ?4 b9 b7 _* J. F: I- ?- I! ?$ xCREATE7 a! v( o8 x, x. @
    USER,ALTER% U1 B$ m4 J( u" T# F
    USER,DROP! F0 K! S, @8 H( k1 y' u8 z$ B' X
    USER; y" A4 |0 H* d- C3 h4 U9 s2 P
  • >TO jxzy_new  
  • >WITH ADMIN OPTION;
回收系统特权 & `- r: z9 M, s2 z( y
  • SQL>REVOKE
    $ Z7 s! x% G9 [: G6 q; qCREATE
    " ]# c/ ~" }* S4 ?/ @/ eUSER,ALTER0 O! T1 B& B, y
    USER,DROP% j: H, Q1 m. Q) \9 j; ?
    USER9 e/ @: [& g- f/ v
  • >FROM jxzy_new  
  • //但没有级联回收功能
显示已被授予的系统特权(某用户的系统级特权) 0 O+ _9 F7 O% F
  • SQL>SELECT*FROM sys.dba_sys_privs
2.4 对象特权管理与控制2 B) o! f9 E7 A9 b. S  O4 D& {
ORACLE对象特权指用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查看、执行(存储过程)、引用(其它表字段作为外键)、索引等。
& z) E6 P: f, A" X. @授予对象特权
1 g) B: I8 U5 V" R
  • SQL>GRANT: q$ {  `% O2 f! t% K" z
    SELECT,INSERT(office_num,office_name),  
  • >UPDATE(desc)ON office_organization  
  • >TO new_adminidtrator  
  • >WITH
    , \! }$ D% h8 A! P9 |( U+ D3 W5 YGRANT
    - O6 B) k2 f8 Q# OOPTION;  
  • //级联授权  
  • SQL>GRANT( w* J" M* }% }! |/ p( Y/ Y
    ALL
    7 ^: B' Q6 H& T7 U$ h( Z9 rON office_organization  
  • >TO new_administrator
回收对象特权 . T( ^' o1 A$ }3 Y4 n* w8 U. ~2 w
  • SQL>REVOKE1 _3 s& `  X" w, z: d
    UPDATE
    + C+ t/ V! O! T/ b' G" L: U. RON office_orgaization  
  • >FROM new_administrator  
  • //有级联回收功能  
  • SQL>REVOKE
    # ~" `7 A6 b4 S& ?5 X# lALL1 y3 V% k) G/ ~9 n5 n% ]2 p
    ON office_organization  
  • >FROM new_administrator  
显示已被授予的全部对象特权 . E' T/ e  I8 T7 o) A2 F! L) W
  • SQL>SELECT*FROM sys.dba_tab_privs
2.5 角色的管理
6 p! c* U' X, kORACLE的角色是命名的相关特权组(包括系统特权与对象特权),ORACLE用它来简化特权管理,可把它授予用户或其它角色。
0 ^9 T4 e( K2 h& |7 i+ v# uORACLE数据库系统预先定义了CONNECT 、RESOURCE、 DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五个角色。CONNECT具有创建表、视图、序列等特权;RESOURCE具有创建过程、触发器、表、序列等特权、DBA具有全部系统特权;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出与装入数据库的特权。
4 M% w: W) H$ s& a4 B通过查询sys.dba_sys_privs可以了解每种角色拥有的权利。
, h$ N1 P: l* ?; C/ H授予用户角色
7 @6 P9 K4 C- f
  • SQL>GRANT DBA TO new_administractor  
  • >WITH
    . {. V: o- T" U8 |4 [$ w  I, NGRANT; S2 I+ z! L& r$ |% c, {5 m3 Z2 o
    OPTION;  
  • ==============================================================
Oracle 的用户根据所被授予的权限分为系统权限和对象权限。其中最高的权限是sysdba。 Sysdba具有控制Oracle一切行为的特权,诸如创建、启动、关闭、恢复数据库,使数据库归档/非归档,备份表空间等关键性的动作只能通过具有sysdba权限的用户来执行。这些任务即使是普通DBA角色也不行。Sysoper是一个与sysdba相似的权限,只不过比sysdba少了SYSOPER privileges WITH ADMIN OPTION,CREATE DATABASE,RECOVER DATABASE UNTIL这几个权限而已。这两者的认证方式是相同的办法,所以下面只介绍sysdba的认证管理。
4 Y$ T& `) }6 P4 @! u/ A7 G4 _. P' e一般对sysdba的管理有两种方式: *** 作系统认证和密码文件认证。具体选择那一种认证方式取决于:你是想在Oracle运行的机器上维护数据库,还是在一台机器上管理分布于不同机器上的所有的Oracle数据库。若选择在本机维护数据库,则选择 *** 作系统认证可能是一个简单易行的办法;若有好多数据库,想进行集中管理,则可以选择password文件认证方式。 9 A( |& V0 S$ C/ [8 J9 L4 J( P9 |
下图比较直观的说明了这个选择权衡过程: / B6 @. W' `# ?, ?0 Q7 p
使用 *** 作系统认证方式的配置过程:
2 |5 _: j' I7 b+ ^7 _; k$ F1. 在 *** 作系统中建立一个合法帐户。 ) p( k0 e' L+ X3 ], X
具体来说,在NT上,首先建立一个本地用户组,取名为ORA__DBA,其中SID为该数据库实例的SID,或者建立一个ORA_DBA地组,该组不对应于任何一个单独的Oracle实例。这样当一个NT上有好几个Oracle实例时,不用分别管理。然后再NT上建立一个用户,并且把它归入该组中。但是实际上这两步在Oracle8I安装过程中已经自动完成了,一般不用手动进行。
! O, H. o& \/ a2 C第三步:在sqlnet.ora(位于$ORACLE_HOME/NETWORK/ADMIN目录中)中,把SQLNET.AUTHENTICATION _SERVICES 设置为SQLNET.AUTHENTICATION_SERVICES= (NTS),意思为使用NT认证方式。
5 U1 [. C( }' ?  s第四步,在INIT.ORA中,把REMOTE_LOGIN_PASSWORD设置为NONE,意思是不用password认证方式。 8 X# \0 _, w7 j4 `5 Y7 i
完成以上步骤后,就可以在登录到NT后,直接在SQL*Plus 和SERVER MANAGER中CONNECT INTERNAL (CONNECT / AS SYSDBA)来作为超级用户登录到Oracle中,执行一些只有超级用户才能进行的 *** 作。
: B1 W1 `1 B3 n' A! g在Unix下,情况有些不同。毕竟这是两个完全不同的 *** 作系统。
  G5 a: w% M6 s+ A6 Y' K; N首先,在安装Oracle之前,建立一个DBA组,这一步不用说了,不然是装不上Oracle的。一般还建立一个名为Oracle的用户,并把它加入到DBA组中。
4 S0 J# c3 T. c' Z7 K$ h4 a6 {第二步, 设置REMOTE_LOGIN_PASSWORD为NONE。在Oracle8.1以后,该参数默认为EXCLUSIVE。一定要记得改过来。
5 p8 y* i. |1 X$ @第三步, 用该用户名登录Unix,运行SQL*Plus 或者SERVER MANAGER,输入以下命令:CONNECT INTERNAL(CONNECT / AS SYSDBA)来登录到Oracle中。 : v( @$ N6 T5 e- {, ~9 z2 P" @
使用password文件认证的具体步骤: / @) g, w/ |* I9 @, e
Oracle提供orapwd实用程序来创建password 文件,运用orapwd建立该认证方式的具体步骤如下:
" @5 E' p% n# v; K9 U+ Z) A  s3 x1. 使用Orapwd实用程序来创建一个PASSWORD文件。语法:
: h2 `) {) C1 K5 K6 Forapwd file=文件名 password=internal用户密码 entried=entries.
# r9 g, P$ o; P: ^; Q7 h. z  N详细解释: , B8 W9 A( y; ^' M
文件名要包含完整的全路径名,如果不指定,Oracle把它默认放置$ORACLE_HOME/dbs(Unix下)或者$ORACLE_HOME/DATABASE(NT下)下。 7 y" s5 d, v& V
用户密码是用户internal的密码。当然后来还可以再向里边加入别的超级用户。
2 L3 O" V6 a8 e; q3 M4 AEntries表示最大允许有的超级用户数目。这个是一个可选的。前两者是必须指定的。一般会把它设置的比实际需要大一些,以免不够。
. q" V, e; b3 V9 z* d- H2. 把INIT.ORA中REMOTE_LOGIN_PASSWORD设置为EXCLUSIVE 或SHARED.使用EXCLUSIVE表示只有当前INSTANCE使用这个password文件。而且允许有别的用户作为sysdba登录进系统里边,而若选择了SHARED,则表明不止一个实例使用这个密码文件,伴随着一个很强的约束:sysdba权限只能授予sys和internal这两个用户名。(其实internal不是一个实际用户,而只是sys作为sysdba登录时的一个别名。)
8 ^3 d/ `) Z% B  \; x# a) [% t8 c同时还要记得把sqlnet.ora文件中SQLNET.AUTHENTICATION _SERVICES设置为NONE。一般在Unix下它是默认设置。在NT下,若选择典型安装时,会使用OS认证,而自定义时会使用密码文件认证方式。在安装过程中会提示输入INTERNAL密码。这样的话,就不用在手工创建密码文件和设定INTERNAL的密码了。
" |; H' ^' C2 V  }4 M/ {- b3. 用SQL*Plus 或SERVER MANAGER运行下面命令登录进系统:CONNECT INTERNAL/密码。
5 _, ~& q( ?& _/ q+ Z" v9 [7 S! ?
0 n4 n" p- w3 s+ v# v8 Y注意点:
: o0 |" ?3 y- t" o# l$ j1.在Oracle8.1.6安装在WIN2000下创建数据库时,常常会发生凭证检索失败的错误。这是由于Oracle不能应用OS认证的结果。一般可以通过修改sqlnet.ora中SQLNET.AUTHENTICATION _SERVICES为NONE来解决。这时,Oracle将采用密码文件认证方式。 - g% E+ L1 c5 h0 w& O& n
2.由于Oracle有几个系统预建的用户,所以最好在安装完成以后马上改变这些用户的密码。系统默认得密码分别为:internal/oracle , sys/change_on_install, system/manager.
5 `) k% D  L3 y& A& N# ~  }3.当选择密码文件认证方式时,可以再向系统中加入其他超级用户。比如用以下语句把用户SCOTT加入超级用户之中:(由具有sysdba权限的人执行) # H, N# t, z* b/ r( [% i, o
SQL>GRANT SYSDBA TO SCOTT;这样SCOTT用户就具有了sysdba权限。注意,此时SCOTT用户可以以两种身份登录:SCOTT , SYS.当SCOTT在登录时没有输入AS SYSDBA时,SCOTT是作为普通用户登录的。而当登录时输入了AS SYSDBA时,此时SCOTT登录进去的用户实际上为sys。 ; g. m3 }4 T# D
4. 当前系统中的具有sysdba权限的用户名可以从数据字典视图v$pwfile_user中查询得到:
% [) o; z& T; U+ ], O. _SELECT * FROM V$PWFILE_USERS; 如上图所示。
9 B1 O  E$ f, Q) [8 v5. 系统中最大的具有sysdba权限的用户数由创建密码文件时的ENTRIES参数决定。当需要创建更多的具有sysdba权限的用户时,就需要删除原有的密码文件,重新创建一个。这需要关闭数据库,删除密码文件,重新创建一个新的密码文件,在entries中输入足够大的数目。再启动Oracle。这时,所有原来北授权的超级用户都不再存在,需要重新授权。所以在重新创建密码文件前,先要查询该视图,记下用户名,再在创建完密码文件后重新授权。   L. N( m& y: s3 D# I
6. Internal用户密码忘记的处理方法:
4 z1 V, x# N' U8 V! J3 u% W/ D有两种办法: 3 J0 |" K+ H( \' k: b: S
1. ALTER USER SYS IDENTIFIED BY 新密码;//这同时也改变了Internal的密码,在Oracle8I中通过 + W! G, Y" w9 G, v/ W5 d* z
2. 重新创建一个新的密码文件,指定一个新的密码。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多