`

介绍oracle的restrict状态

阅读更多
在Oracle启动时,有三种状态可以选择:restrict,force,EXCLUSIVE.这篇文章,介绍一下关于restrict状态。
1. startup restrict:
   约束方式启动,即只是允许一定权限的用户访问数据库。这个权限,grant user.
   非特权用户访问时,会出现以下提示:
    ERROR:
    ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用.

2.实例操作:
  在Oracle中,有时候要执行一些管理性的操作,而这些操作运行的时候不能有其他用户同时访问数据库。对于这种情况可以设置系统进入RESTRICTED SESSION状态禁止普通用户登陆数据库。

数据库可以在启动的时候以RESTRICT方式来启动数据库:

SQL> conn / as sysdba已连接。
SQL> shutdown immediate数据库已经关闭。已经卸载数据库。
ORACLE例程已经关闭。
SQL> startup restrict
ORACLE例程已经启动。

Total System Global Area 5279498240 bytes
Fixed Size 2094528 bytes
Variable Size 3192597056 bytes
Database Buffers 2080374784 bytes
Redo Buffers 4431872 bytes数据库装载完毕。数据库已经打开。
SQL> conn test/test
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。
SQL> conn / as sysdba已连接。
SQL> select granted_role from dba_role_privs
2 where grantee = 'TEST';

GRANTED_ROLE
------------------------------------------------------------
CONNECT
RESOURCE

SQL> grant dba to test;

授权成功。

SQL> conn test/test已连接。
SQL> conn / as sysdba已连接。
SQL> revoke dba from test;

撤销成功。

SQL> grant restricted session to test;

授权成功。

SQL> conn test/test已连接。

可以看到,当数据库以RESTRICT状态启动,或者进入到RESTRICT状态,则Oracle禁止普通用户连接数据库。

而拥有DBA角色的用户,或者拥有RESTRICTED SESSION权限的用户可以登陆数据库。

在Oracle11g的管理员手册文档中有一个地方的描述错误:

Further, 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.

根据文档的描述,如果数据库处于RESTRICTED SESSION状态,则禁止用户采用NET服务方式登陆,而必须在服务器上直接登陆,但是测试发现,Oracle并没有这个限制。

SQL> conn / as sysdba已连接。
SQL> alter system disable restricted session;

系统已更改。

SQL> conn test/test@test11g已连接。
SQL> conn / as sysdba已连接。
SQL> alter system enable restricted session;

系统已更改。

SQL> conn test/test@test11g已连接。

无论是在本机通过服务名方式,还是在其他客户端通过服务名方式都可以连接到RESTRICTED SESSION状态的数据库,只要登陆用户拥有RESTRICTED SESSION权限。

下面再来看看RESTRICTED SESSION状态,对于已经登陆数据库的普通用户有何影响:

SQL> conn / as sysdba已连接。
SQL> revoke restricted session from test;

撤销成功。

SQL> alter system disable restricted session;

系统已更改。

在会话1,回收TEST用户的RESTRICTED SESSION权限,使其变为普通用户。并将数据库从RESTRICTED SESSION状态转为正常状态。

下面在会话2用TEST用户登陆数据库:

SQL> CONN TEST/test已连接。
SQL> SET SQLP 'SQL2> '
SQL2> SELECT * FROM SESSION_PRIVS;

PRIVILEGE
--------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE

已选择10行。

下面回到会话1,将数据库置于RESTRICT SESSION状态:

SQL> alter system enable restricted session;

系统已更改。

执行RESTRICTED SESSION命令很快就返回了,说明命令已经执行成功,下面尝试普通用户登陆:

SQL> conn test/test
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。

登陆报错,说明RESTRICT状态已经生效,回到会话2,看看数据库的RESTRICTED SESSION状态对已经登陆的普通会话是否有影响:

SQL2> SELECT * FROM DUAL;

DU
--
X

SQL2> CREATE TABLE T1 (ID NUMBER);
CREATE TABLE T1 (ID NUMBER)
*第1行出现错误:
ORA-01536:超出表空间'YANGTK'的空间限额


SQL2> CREATE OR REPLACE PROCEDURE P AS
2 BEGIN
3 NULL;
4 END;
5 /

过程已创建。

虽然建表语句失败了,但是这时由于刚才回收DBA角色,导致UNLIMITED TABLESPACE权限被连带回收造成的,与RESTRICTED SESSION的状态无关。

可以看到,虽然数据库处于RESTRICTED SESSION状态,但是数据库中已经登陆的会话可以继续执行任何操作,直到会话断开连接。

这个现象说明,如果希望数据库处于RESTRICTED SESSION状态,且此时不希望普通用户登陆数据库,那么最好的方法是采用STARTUP RESTRICT的方式来启动数据库,这样可以确保没有普通用户登陆。而ALTER SYSTEM ENABLE RESTRICTED SESSION的方式虽然可以使得数据库进入RESTRICT状态,但是不能保证现有的连接用户都是具有RESTRICTED SESSION权限的。即使是在STARTUP之后,马上发出ENABLE RESTRICTED SESSION命令也是不可靠的,因为这个时间差可能使得后台JOB运行了。因此如果是使用ENABLE RESTRINCTED SESSION方式,还需要在后台通过ALTER SYSTEM KILL SESSION的方式清除掉所有的普通用户连接。

最后来看看RESTRICTED SESSION状态和RAC环境的关系。

RESTRICTED命令是在实例上执行的,因此Oracle是否将这个命令应用到整个RAC环境需要通过测试来说明。

为了更好的说明情况,下面的测试在一个三节点的RAC环境中进行,其中两个节点处于启动状态,另一个节点关闭。

随后在实例1上发出ALTER SYSTEM ENABLE RESTRICTED SESSION语句,检查这个操作对实例2是否生效,将实例3启动,检查这个限制新启动的实例3是否有效。

bash-2.03$ srvctl status db -d testrac
Instance testrac1 is running on node racnode1
Instance testrac2 is running on node racnode2
Instance testrac3 is running on node racnode3
bash-2.03$ srvctl stop inst -d testrac -i testrac3
bash-2.03$ srvctl status db -d testrac
Instance testrac1 is running on node racnode1
Instance testrac2 is running on node racnode2
Instance testrac3 is not running on node racnode3
bash-2.03$ sqlplus test/test@testrac1


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE MATERIALIZED VIEW
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE

已选择14行。

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
testrac1

将实例1变为RESTRICTED SESSION状态:

SQL> conn sys@testrac1 as sysdba输入口令:已连接。
SQL> alter system enable restricted session;

系统已更改。

SQL> conn test/test@testrac1
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。
SQL> conn test/test@testrac2已连接。
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
testrac2

显然实例1上的设置与实例2无关,对于实例3而言其实都不用测试,因为数据库启动的时候没有指定STARTUP RESTRICT,自然不会启用RESTRICTED SESSION状态,不过为了严谨,还是测试一下:

SQL> host
$ srvctl start inst -d testrac -i testrac3
$ exit

SQL> conn test/test@testrac1
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。
SQL> conn test/test@testrac3已连接。
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
testrac3

SQL> select instance_name, status, logins from gv$instance;

INSTANCE_NAME STATUS LOGINS
---------------- ------------ ----------
testrac3 OPEN ALLOWED
testrac2 OPEN ALLOWED
testrac1 OPEN RESTRICTED

对于RESTRICTED SESSION状态,RAC环境的各个实例之间是相互独立的,各自的状态完全由各自的实例进行设置。

分享到:
评论

相关推荐

    Oracle 数据库管理.pdf

    4. startup restrict:与startup open类似,但将限制用户连接到数据库。 数据库的关闭也分为几种模式: - NORMAL:正常关闭,所有与数据库的连接必须在关闭之前断开。 - IMMEDIATE:立即关闭,尽可能快地关闭数据库...

    oracle 客户端不支持中文解决办法

    - 如果遇到错误,可以尝试在`startup restrict`模式下运行该命令。 8. **关闭并重启数据库**: - 最后执行`shutdown immediate`和`startup`来完成整个流程。 #### 调试命令示例 以下是根据上述步骤的实际操作...

    Oracle常用命令大全

    ### Oracle常用命令详解 #### 一、Oracle的启动与关闭 **1.... - **启动Oracle系统** ...这些命令和技巧是Oracle日常管理工作中不可或缺的一部分,能够帮助数据库管理员更好地监控和维护数据库的健康状态。

    深刻理解Oracle数据库的启动和关闭

    Oracle 数据库启动和关闭的理解是每个数据库管理员必备的基础知识。Oracle 提供了多种启动和关闭数据库的方法,以适应不同情况和需求。以下是关于这个主题的详细解析: 首先,Oracle 数据库启动过程通常涉及三个...

    unix下oracle命令

    启动方式有多种,包括`startup nomount`(非安装启动)、`startup mount dbname`(安装启动)、`startup open dbname`(打开启动,允许数据访问),还有`startup restrict`(约束启动)、`startup force`(强制启动...

    oracle相关服务启动管理

    本文将详细介绍这些操作的具体步骤及其背后的原理。 #### 二、数据库实例的启动与关闭 ##### 1. 数据库实例的启动方式 - **NOMOUNT**:仅启动实例但不装载数据库。 - 命令:`sql> startup nomount` - **MOUNT**:...

    oracle启动数据库

    3. **打开数据库**:数据库进入正常工作状态,数据文件和重做日志文件被激活并可供使用。 #### 四、启动命令及其选项 启动命令可以控制数据库启动的不同阶段,主要包括以下几种: 1. **STARTUP NOMOUNT**:仅创建...

    Oracle参考资料

    本文档是关于Oracle数据库管理基础的教学资料,主要介绍了Oracle 9i版本的基础知识,包括数据库架构、服务器入门以及如何管理和配置Oracle实例等内容。本章节重点介绍的是PL/SQL编程相关的信息。 #### 二、PL/SQL...

    个人总结oracle 9i常用命令(txt)

    - **Startup restrict**: 受限模式启动,仅允许具有特定权限的用户登录。 - **Startup force**: 强制关闭所有连接并重启数据库,通常用于恢复情况。 - **Startup pfile=**: 指定参数文件来启动数据库。 - **Startup ...

    最全的ORACLE常用命令集合

    ### ORACLE常用命令详解 ...总结来说,本文详细介绍了Oracle数据库的启动和关闭命令、不同的启动方式以及如何有效地利用数据字典进行查询和管理。这些知识点对于Oracle数据库管理员和开发人员来说都是非常实用的。

    oracle数据库管理手册

    - 约束启动:STARTUP RESTRICT; - 强制数据库启动:STARTUP FORCE; **4.2 更改数据库的可用性** - 将数据库装入实例:ALTER DATABASE MOUNT; - 打开一个关闭的数据库:ALTER DATABASE OPEN; **4.3 关闭数据库** ...

    oracle常用命令

    4. **受限启动状态**:`startup restrict`限制只有具有相应权限的用户才能访问数据库,常用于维护窗口期间减少对数据库的访问压力。 5. **强制启动状态**:`startup force`用于紧急情况下,当数据库由于异常情况...

    ORACLE常用命令

    ### ORACLE常用命令详解 #### 一、ORACLE的启动和关闭 ...通过以上命令,可以有效地管理和监控ORACLE数据库的状态和性能。这些命令是ORACLE DBA日常工作中必不可少的一部分,能够帮助DBA快速定位问题并采取相应措施。

    oracle10g常用命令

    ### Oracle 10g 常用命令详解 ...以上内容详细介绍了Oracle 10g中常用的启动与关闭命令、不同的启动方式以及如何有效地利用数据字典。这对于初学者来说是一份非常实用的指南,有助于理解和掌握Oracle数据库的基本操作。

    Oracle数据库startup和shutdown方式

    - **STARTUP RESTRICT**:此模式下,即使数据库成功启动,也只允许拥有DBA角色的用户登录。通常用于维护窗口期间,限制非DBA用户访问。 - **STARTUP FORCE**:强制重启数据库,相当于先执行`SHUTDOWN ABORT`然后再...

    oracle学习宝典

    - `STARTUP RESTRICT`:以受限模式启动数据库。 - `ALTER SYSTEM DISABLE RESTRICTED SESSION`:禁用受限模式。 - `ALTER SYSTEM ENABLE RESTRICTED SESSION`:启用受限模式。 #### 三、Oracle 控制文件 控制...

    最全的oracle常用命令大全.txt

    5、startup restrict 约束方式启动 这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示: ERROR: ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、...

    oracle备份和dba

    本文将详细介绍Oracle数据库的一些基本备份操作。 #### 二、Oracle数据库启动与关闭 1. **启动数据库**: - `C:>sqlplus "/as sysdba"`:通过SQL*Plus工具以sysdba身份登录。 - `C:>sqlplus /nolog`:以无日志...

    oracle常用命令.pdf

    本文将详细介绍Oracle数据库的启动和关闭方法以及如何有效利用数据字典。 首先,Oracle数据库的启动和关闭通常需要以特定的系统用户(如`oracle`)身份进行。在单机环境下,启动Oracle系统可以通过以下步骤: 1. ...

Global site tag (gtag.js) - Google Analytics