oracle 的restrict模式(转)
上一篇 / 下一篇 2009-05-24 18:49:06 / 个人分类:Oracle
- 文件版本: V1.0
- 开发商: 本站原创
- 文件来源: 本地
- 界面语言: 简体中文
- 授权方式: 免费
- 运行平台: Win9X/Win2000/WinXP
在Oracle中,有时候要执行一些管理性的操作,而这些操作运行的时候不能有其他用户同时访问数据库。对于这种情况可以设置系统进入RESTRICTED SESSION状态禁止普通用户登陆数据库。
DK2y2Nq;bD7l%T0数据库可以在启动的时候以RESTRICT方式来启动数据库:51Testing软件测试网*u{yP(T
0JGt;wTq b0SQL> conn / as sysdba已连接。
3?A.AV Y&Qo!Y0SQL> shutdown immediate数据库已经关闭。已经卸载数据库。51Testing软件测试网,c!K G@T/In
ORACLE例程已经关闭。51Testing软件测试网P5t6sMI0B
SQL> startup restrict51Testing软件测试网5]'^8UX(p!Oo.lS:Lz9[
ORACLE例程已经启动。51Testing软件测试网0{I;F*~6M$\~)|
9S3d6jI/py$w,u0Total System Global Area 5279498240 bytes
`#hb K3PJ"S3@
O9n0Fixed Size 2094528 bytes
6Wtp+p,s0Variable Size 3192597056 bytes
I0}1g4A-W:~(?r5|w0Database Buffers 2080374784 bytes
e:Af'QDD,Ft4W'q0Redo Buffers 4431872 bytes数据库装载完毕。数据库已经打开。51Testing软件测试网%h.NH1[(}z uf,K
SQL> conn test/test
Cf[1p%SO,L/u0ERROR:
!?imR wq0ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege
警告:您不再连接到ORACLE。51Testing软件测试网T*MN0JR(n
SQL> conn / as sysdba已连接。
+xK4aa Q0SQL> select granted_role from dba_role_privs
2f8gA!V+qCW02 where grantee = 'TEST';51Testing软件测试网urJwS'U9]r2W
.@'Q0i}Y3TBCK0GRANTED_ROLE
Gev2JV@8_x0------------------------------------------------------------
VU7]pF"q)X0e0CONNECT51Testing软件测试网b7c6b
D.OV0]_
RESOURCE51Testing软件测试网Nc \%~v6Z
#G[:@@;pj IFj:i+{ k0SQL> grant dba to test;
v7CdO.Rg"F2vH?^051Testing软件测试网.~+pR8{:J7z8uj授权成功。51Testing软件测试网6q2rFVpT!vX
W R$g%`6G#{3A6f0SQL> conn test/test已连接。51Testing软件测试网
ymmXx5k
SQL> conn / as sysdba已连接。51Testing软件测试网s w$CXv,O"w
SQL> revoke dba from test;
撤销成功。
3S7J/xN2ve0;x3je:V2|(S0SQL> grant restricted session to test;51Testing软件测试网-y%j Z,j&U'}\0z
51Testing软件测试网+ND)J.l9pg.{Z授权成功。
z9|MID)Y/g)y051Testing软件测试网?0\GC!G.JSQL> conn test/test已连接。
Qx+x/}\!?%A0可以看到,当数据库以RESTRICT状态启动,或者进入到RESTRICT状态,则Oracle禁止普通用户连接数据库。
.y8Cic { V4iM$e&F0而拥有DBA角色的用户,或者拥有RESTRICTED SESSION权限的用户可以登陆数据库。
:`cp.F0?D,TW/Sjp/W0在Oracle11g的管理员手册文档中有一个地方的描述错误:
1x(ba |8E\ f8M0^1U |h e}0Further, when the instance is in restricted mode, a database administrator cannot access the instance remotely through an Oracle Net listener, but can only access the instance locally from the machine that the instance is running on.51Testing软件测试网#Z5q'vpl5U
根据文档的描述,如果数据库处于RESTRICTED SESSION状态,则禁止用户采用NET服务方式登陆,而必须在服务器上直接登陆,但是测试发现,Oracle并没有这个限制。51Testing软件测试网;m'C4i^*}H;BD@
51Testing软件测试网H&D U(~7LSQL> conn / as sysdba已连接。
jL"|/]){ a,]N0SQL> alter system disable restricted session;51Testing软件测试网;}r2bMiKd'W
EU,\r{ly+N0系统已更改。51Testing软件测试网([ f)c.eaKO1snH;}f
-n8f&fsjI0SQL> conn test/test@test11g已连接。
HJmd~;FmW'S0SQL> conn / as sysdba已连接。
kLh7h9Xz,Hp`y(H0SQL> alter system enable restricted session;51Testing软件测试网(X?3_V@$['R c
']A7B#z^0E%A0系统已更改。
+\l2\ ] s;w%]$H051Testing软件测试网xc8TA6}XmSQL> conn test/test@test11g已连接。51Testing软件测试网_5BxR Jo%DJT
无论是在本机通过服务名方式,还是在其他客户端通过服务名方式都可以连接到RESTRICTED SESSION状态的数据库,只要登陆用户拥有RESTRICTED SESSION权限。51Testing软件测试网6Z8y8hpM
下面再来看看RESTRICTED SESSION状态,对于已经登陆数据库的普通用户有何影响:51Testing软件测试网;e(OY$E@+x
D
V(bGxnq0SQL> conn / as sysdba已连接。
*? @Eg$F2|x)~0SQL> revoke restricted session from test;
撤销成功。
WYx7T5?051Testing软件测试网Bk^XR*P]i[ySQL> alter system disable restricted session;51Testing软件测试网gSg$O tJyJ
51Testing软件测试网3{,Y:^;e1e.sq#f系统已更改。51Testing软件测试网u vn-E/k3`f
在会话1,回收TEST用户的RESTRICTED SESSION权限,使其变为普通用户。并将数据库从RESTRICTED SESSION状态转为正常状态。51Testing软件测试网tlav b
下面在会话2用TEST用户登陆数据库:
UBA~0c7bkr0,w!~Tv,s6G7W\0SQL> CONN TEST/test已连接。51Testing软件测试网P d6n y$E"X(b_`
SQL> SET SQLP 'SQL2> '
vV @|n;F5M1d'`BD$I0SQL2> SELECT * FROM SESSION_PRIVS;51Testing软件测试网
i8X3L5LJ:I$yn p+mP X4M)h
PRIVILEGE51Testing软件测试网2n6@f0B&t
j3I
--------------------------------------------------------------------------------
7m P~|#oEJ0CREATE SESSION51Testing软件测试网'xPAw$G mlcY
CREATE TABLE
,m%p9C5_VCm0CREATE CLUSTER51Testing软件测试网Cx U%wjweP)I
CREATE SEQUENCE51Testing软件测试网)do^4t7BH\-bf:S,\
CREATE DATABASE LINK51Testing软件测试网h"}wy)rs/{
CREATE PROCEDURE51Testing软件测试网6@ z$p3Cq/z
CREATE TRIGGER
,HQ
n-[8Q|0CREATE TYPE
3^k
JKJ0CREATE OPERATOR
'_W,\$ldT3H0CREATE INDEXTYPE
G/E4q(u!i/xz0已选择10行。
"PRXw;G0下面回到会话1,将数据库置于RESTRICT SESSION状态:51Testing软件测试网y9_6WN6Tq_D
51Testing软件测试网t?YQ0zI?C c%ZSQL> alter system enable restricted session;
*w"K LQ1B!@&]^051Testing软件测试网:g9s%s LK3^系统已更改。51Testing软件测试网R#}*cs.n#{&g1kc/M~
执行RESTRICTED SESSION命令很快就返回了,说明命令已经执行成功,下面尝试普通用户登陆:51Testing软件测试网$u G iULD3O,w1Ya
3F,wd \,z[{X5@
e0SQL> conn test/test51Testing软件测试网*@]4p_K
ERROR:
1\ O;Ct
VO{M.]x0ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege
警告:您不再连接到ORACLE。
sj D*T2GN0登陆报错,说明RESTRICT状态已经生效,回到会话2,看看数据库的RESTRICTED SESSION状态对已经登陆的普通会话是否有影响:
oRwc [3A5J4p [?051Testing软件测试网RA fSnSQL2> SELECT * FROM DUAL;
:q4f ] ^\6OO051Testing软件测试网!Wtia(v N,|$V;wDU
3t5OFA-Y^ L0--
ToEaJL$q mq6[0X51Testing软件测试网]$[+Kn4kL,v0G7d
SQL2> CREATE TABLE T1 (ID NUMBER);
s;Ou0[gVUH~0f#?0CREATE TABLE T1 (ID NUMBER)51Testing软件测试网 b/]t_'k/d%S
*第1行出现错误:
@ V#PES8L0ORA-01536:超出表空间'YANGTK'的空间限额51Testing软件测试网8^C#t$}.Pya-R/yl
o.T$c6MZ;\9i0
3u&s-|X3JME {]6h8t0SQL2> CREATE OR REPLACE PROCEDURE P AS
P:~[EQ8v XP'U_B8X02 BEGIN
j){7W;b E@l!{03 NULL;
j0TS^B.x04 END;51Testing软件测试网 cI6w wZY6h
5 /51Testing软件测试网A+v7W R8AK;_%C4~o
!\FZB:Dl0过程已创建。51Testing软件测试网#SK}!h)zvk
虽然建表语句失败了,但是这时由于刚才回收DBA角色,导致UNLIMITED TABLESPACE权限被连带回收造成的,与RESTRICTED SESSION的状态无关。
l5y%T2p%pw0可以看到,虽然数据库处于RESTRICTED SESSION状态,但是数据库中已经登陆的会话可以继续执行任何操作,直到会话断开连接。51Testing软件测试网;_b@8~W0R
这个现象说明,如果希望数据库处于RESTRICTED SESSION状态,且此时不希望普通用户登陆数据库,那么最好的方法是采用STARTUP RESTRICT的方式来启动数据库,这样可以确保没有普通用户登陆。而ALTER SYSTEM ENABLE RESTRICTED SESSION的方式虽然可以使得数据库进入RESTRICT状态,但是不能保证现有的连接用户都是具有RESTRICTED SESSION权限的。即使是在STARTUP之后,马上发出ENABLE RESTRICTED SESSION命令也是不可靠的,因为这个时间差可能使得后台JOB运行了。因此如果是使用ENABLE RESTRINCTED SESSION方式,还需要在后台通过ALTER SYSTEM KILL SESSION的方式清除掉所有的普通用户连接。
\4~v8e0f4{eU)lm0最后来看看RESTRICTED SESSION状态和RAC环境的关系。
reYk"\ gg0RESTRICTED命令是在实例上执行的,因此Oracle是否将这个命令应用到整个RAC环境需要通过测试来说明。51Testing软件测试网\n3z!FZy)u
为了更好的说明情况,下面的测试在一个三节点的RAC环境中进行,其中两个节点处于启动状态,另一个节点关闭。
r0|B~:rxR%W0随后在实例1上发出ALTER SYSTEM ENABLE RESTRICTED SESSION语句,检查这个操作对实例2是否生效,将实例3启动,检查这个限制新启动的实例3是否有效。
m ? }5[NIa051Testing软件测试网oE_(]F`VP6pbash-2.03$ srvctl status db -d testrac
+n0xbPkl"J0Instance testrac1 is running on node racnode151Testing软件测试网 u!Mz_"g2W/{K+A.A
Instance testrac2 is running on node racnode2
(Bh,x
z!|+c
p-d0Instance testrac3 is running on node racnode351Testing软件测试网1a|5LSS MveEK
bash-2.03$ srvctl stop inst -d testrac -i testrac3
8nJ4A7~_9R6}3`0bash-2.03$ srvctl status db -d testrac51Testing软件测试网/F,WC/I*R5Y
Instance testrac1 is running on node racnode1
"ydb?1|/G0Instance testrac2 is running on node racnode2
Eg9d*B8U`!tVg;K0Instance testrac3 is not running on node racnode3
c2Ep6^
T6\0bash-2.03$ sqlplus test/test@testrac1
#v:bQn8IQm?0SQL*Plus: Release 10.2.0.3.0 - Production on星期四2月19 23:09:47 200951Testing软件测试网_#Y'|9[V
51Testing软件测试网}xpV7e*F_Copyright (c) 1982, 2006, Oracle. All Rights Reserved.51Testing软件测试网2W JH\8z9@%I
vz#k,Hs'p^H0连接到:51Testing软件测试网 lIZUpW
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
1w.F,\,Phl~Nf0With the Partitioning, Real Application Clusters, OLAP and Data Mining options51Testing软件测试网'?#yH`U9w
SQL> select * from session_privs;
4|^ pk9]e'N#lz#DDV-J051Testing软件测试网N6c-]*f6x[PRIVILEGE
sjPuh X-^/H0----------------------------------------
c-eRBik$@#e sh[0CREATE SESSION
,^-dy1?et~(\0UNLIMITED TABLESPACE51Testing软件测试网v3PI;t*Y6c{yj
CREATE TABLE51Testing软件测试网quF,b6q)H
CREATE CLUSTER51Testing软件测试网mY:FPlf$v
CREATE SYNONYM
`!AJ(xxr0CREATE VIEW
7@I%A9U%x,B{0CREATE SEQUENCE
*`h` k[%x,_)Y0CREATE DATABASE LINK51Testing软件测试网(JoS*J:ce~w
CREATE PROCEDURE51Testing软件测试网%lY3O#R vG
CREATE TRIGGER
;W0iOkj$eauc[0CREATE MATERIALIZED VIEW
W/r*Y,Yyu(lbZ0CREATE TYPE
@eNK,YE\0CREATE OPERATOR51Testing软件测试网O$M[9eL)O|
CREATE INDEXTYPE51Testing软件测试网;hB/|q1L+P@
已选择14行。51Testing软件测试网s#R D`9sq5Kl
51Testing软件测试网[r JS@/T r1_:J:`9fSQL> select instance_name from v$instance;51Testing软件测试网#zOB2mon-B