如何理解Restrict Session与Restricted Mood,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了肃北免费建站欢迎大家使用!
查阅Oracle官方文档,看到SYSDBA和SYSOPER两个特殊的系统权限System Privilege。在两个权限可以进行的操作中,有一个名为Restricted Session的权限项目,做一下深入的研究。
启动Oracle数据库服务器,是一个阶段性的操作。大体上分为nomount、mount和Open三个阶段。下面是在linux平台上进行的分阶段启动演示。
//连接到一个空实例上,注意,这里验证使用的是OS验证方式;
SQL> conn / as sysdba
Connected to an idle instance.
//nomount状态启动,实例进程启动,SGA空间分配,参数文件加载;
SQL> startup nomount
ORACLE instance started.
Total System Global Area 414298112 bytes
Fixed Size 1336904 bytes
Variable Size 310380984 bytes
Database Buffers 96468992 bytes
Redo Buffers 6111232 bytes
//控制文件加载应用,定位数据文件;
SQL> alter database mount;
Database altered.
//打开数据库文件,实现操作;
SQL> alter database open;
Database altered.
在启动之后,数据库用户就可以进行连接。
启动restricated mode
作为DBA,是可以控制启动阶段和进程的。不同的阶段,可以进行不同类型的操作,如备份各种类型文件。
有时候,我们希望只有特定的一些用户可以连入数据库,比如管理员级别用户。在这种时候,我们可以使用restricted mode方式启动数据库。
启用restricted mode方式启动和运行数据库后,只有那些具有create session和restricted session权限的用户,才能登录入系统数据库。默认情况下,只有SYSDBA和SYSOPER用户拥有restricted session权限。意味着只有数据库管理权限的用户才能进行restricted mode下的数据管理工作。
还有一点要注意,在restricted mode下,用户即使拥有restricted session权限,只能本地登录并且不经过监听程序才可以。Remote方式登录是被拒绝的。
通常,在下面的情况下才考虑使用restricted mode进行维护工作。
ü 需要进行导入和导出数据。这个过程中,数据完整性是不能保证的,最好还是禁止应用用户登入;
ü 使用SQL*Loader进行数据加载;
ü 临时性的拒绝一般用户连入访问数据;
ü 执行特定的数据移植和升级操作;
使用startup restrict命令,就可以以restricted mode方式启动数据库。
SQL> startup restrict
ORACLE instance started.
Total System Global Area 414298112 bytes
Fixed Size 1336904 bytes
Variable Size 310380984 bytes
Database Buffers 96468992 bytes
Redo Buffers 6111232 bytes
Database mounted.
Database opened.
此时,从客户端尝试登录。
首先,尝试在本地local登录
//本地绕过监听器程序登录,是通过的。
SQL> conn / as sysdba;
Connected.
SQL> select count(*) from dba_objects;
COUNT(*)
----------
72461
//监听器本地登录
SQL> conn sys/sys@wilson as sysdba;
ERROR:
ORA-12526: TNS:listener: all appropriate instances are in restricted mode //报错,被拒绝
Warning: You are no longer connected to ORACLE.
//非restricted session权限用户
SQL> conn scott/tiger@wilson;
ERROR:
ORA-12526: TNS:listener: all appropriate instances are in restricted mode //连接被拒绝
//本机非权限登录
SQL> conn scott/tiger
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege
这次换使用远程登录
SQL> conn sys/sys@wilson as sysdba;
ERROR:
ORA-12526: TNS:监听程序:所有适用例程都处于受限模式
SQL> conn /@wilson as sysdba;
ERROR:
ORA-12526: TNS:监听程序:所有适用例程都处于受限模式
SQL> conn scott/tiger@wilson as sysdba;
ERROR:
ORA-12526: TNS:监听程序:所有适用例程都处于受限模式
试验结果比较怪异,
1、restricted mode是一种连接模式,似乎受到监听器的拦截;
2、绕过监听器程序之后,要进行权限验证;
两个条件均满足,验证了用户是具有权限,且是登录本地的用户。
监听器状态有什么特殊的吗?
[oracle@oracle11g ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-JAN-2011 15:23:08
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 04-JAN-2011 14:55:16
Uptime 0 days 0 hr. 27 min. 52 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/oracle/network/admin/listener.ora
Listener Log File /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))
Services Summary...
Service "wilson" has 1 instance(s).
Instance "wilson", status RESTRICTED, has 1 handler(s) for this service...
Service "wilsonXDB" has 1 instance(s).
Instance "wilson", status RESTRICTED, has 1 handler(s) for this service...
The command completed successfully
看到,监听器对于数据库的状态是了解的。这样就可以理解监听器报错12526了。
恢复状态
通过alter system命令,可以将数据库系统从restricted mode转化回正常模式。
SQL> alter system disable restricted session;
System altered.
//稍稍等待一下,因为动态注册可能需要一会更新
SQL> conn scott/tiger@wilson;
Connected.
SQL> select count(*) from emp;
COUNT(*)
----------
14
Open状态的系统限制访问
在数据库处在open状态的时候,我们也可以通过alter system命令,强行将系统模式转化到restricted mode。命令为:
SQL> alter system enable restricted session;
System altered.
这时,系统会转入到restricted模式。注意,这个时候是可能有其他session正在连入数据库,不同的结构是由不同的处理方式的。
ü 在单实例的环境中,如果系统没有安装Oracle Restart(Oracle管理一个工具),所有用户会话都不会受到影响。所以,在转换到restricted mode之后,进行管理工作之前,要手工的kill掉所有的用户会话;
ü 在单实例的环境中,如果有Oracle Restart组件,所有被Oracle Restart管理的服务都被做离线处理,所有user session自动终止。没有被Restart管理的服务的连接,是不会离线的;
ü RAC环境下,实例的服务都是被Oracle Clusterware管理,都会自动终止掉。没有被Clusterware管理的组件,是不会离线处理的;
Restricted Mode是一种管理工具,在管理生产环境的时候还是比较实用的。
看完上述内容,你们掌握如何理解Restrict Session与Restricted Mood的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!