- 浏览: 442466 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
鱼里的yeol:
正在学习EJB 感觉有些吃力
Ejb3学习之二----Ejb3的Ejb Bean类型介绍 -
phoenix5870:
默认就是singleton的。
Spring中的Singleton模式和Java中的Singleton模式 -
jhys7s8jd:
pdf打印机下载 无水印http://www.onlinedo ...
PDFCreate工具的使用 -
wang371134086:
:e vil:
浅谈Struts2中的拦截器实现责任链模式 -
liu765023051:
亲,local与remote有什么区别呢
EJB学习之三---Local和Remote接口
在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环境的各个实例之间是相互独立的,各自的状态完全由各自的实例进行设置。
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的Hash Join之探究整理
2012-04-08 15:48 11318Hash join算法原理 自从or ... -
Oracle Event 10046
2012-03-29 23:17 1599下面是一个10046的例子,可以用来分析具体的一些sql执行计 ... -
使用SQL_TRACE进行数据库诊断
2012-03-29 23:08 968From:http://www.eygle.com/archi ... -
Oracle索引之B-Tree和Bitmap索引对比
2012-03-23 18:32 2330B树索引是所有大型关系 ... -
Oracle性能优化五大工具介绍
2012-03-23 15:55 1539本文介绍了Oracle性能优化工具Oracle数据库在线数据字 ... -
Oracle事物处理中回滚段容量的问题
2012-03-23 15:33 1598在执行大事务时,有时oracle会报出如下的错误: ORA- ... -
Oracle 中条件分歧总结
2011-06-01 23:17 1309Oracle 中条件分歧总结: * Decode * IF ... -
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法
2011-06-01 23:07 2274转载:http://blog.csdn.net/songsen ... -
View的作用
2010-11-11 00:53 3130这篇文章重要讲述下关 ... -
Oracle For Update 行锁
2010-11-08 23:43 1925转自:http://hi.baidu.com/mcj0127/ ... -
Mysql的存储引擎:InnoDB和MyISAM区别
2010-10-05 02:25 1337InnoDB和MyISAM是许多人在 ... -
SSMAを活用してMySQL/AccessからSQL Server/Azureへマイグレーション
2010-09-10 23:03 2301作者 Abel Avram , 翻訳者 (株)ネクストスケープ ... -
Oracle 嵌套事务与自治事务思考
2010-04-22 21:35 6205关键字 嵌套事务和自治事务的概念 嵌套事务的使用 ... -
Oracle中Cursor介绍
2010-04-21 22:09 1734关键字 概念 类型 异常处理 一 概念 游标是SQL ... -
Oracle 10g 中动态性能视图
2010-04-16 19:18 2020动态性能视图用于记录当前例程的活动。启动例程时,oracle会 ... -
Oracle 和 Sql Server中日期的显示问题
2010-03-10 02:01 2824在日常的项目中,经常遇见User需要显示不同的日期格式。当然, ... -
Oracle中RowNum的用法
2010-02-08 22:05 1774ROWNUM,是一种伪列,它根据特定记录返回一个序列化的数字。 ... -
ORACLE 分析函数解析
2010-01-17 21:29 1309分析函数是oracle 8.1.6中就引入的一个全新的概念,为 ... -
ORACLE LOB大对象处理
2010-01-16 21:42 2422ORACLE LOB大对象处理 主要是用来存储大量数据的数据库 ... -
DUMP用法
2010-01-16 09:13 1819一 DUMP():查看表中列在datafile中的存储内容,它 ...
相关推荐
Oracle 主要配置文件介绍: profile文件,oratab 文件,数据库实例初始化文件 initSID.ora,监听配置文件, sqlnet.ora 文件,tnsnames.ora 文件 <br>1.2 Oracle 主要配置文件介绍 1.2.1 /etc/profile 文件...
安全厂家给出的解决办法: 链接:http://www.oracle.com/technetwork/topics/security/alert-cve-2012-1675-1608180.html ...Using Class of Secure Transport (COST) to Restrict Instance Registration
iOS 修改反注入标识__RESTRICT为其它值,同时具有注入功能
NULL 博文链接:https://junge8618.iteye.com/blog/963692
oracle数据库监听器安全指南 ... Oracle 10.1 and above by default restrict all remote administration of the Listener, unless security is explicitly turned off in the configuration file.
A-PDF Restrict Remover.exe 可以破解pdf文件的密码的软件。
5、startup restrict 约束方式启动 这种方式能够启动数据库,但只允许具有一定特权的用户访问 非特权用户访问时,会出现以下提示: ERROR: ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、...
ldidY
restrict user login times
使用这种方法,数据库必须处于打开状态,而且如果数据库不是在restrict状态将不能保证导出数据的一致性。 “物理备份”方式以相当于copy数据文件的方式进行备份,恢复时可以快速以相当于copy的方式将备份的数据...
mysql中的cascade级联,set null,restrict限制 都是什么意思,有何区别.zip
html-restrict:HTML :: Restrict-剥离不需要HTML标记
通过使用 A-PDF Restrict Remover,你可以立刻移除PDF文档的密码以及各种限制,它不是一个密码恢复工具,因为在您移除文档限制时不需要输入密码,A-PDF Restrict Remover 非常简单易用,在windows资源管理器中仅通过...
Node-restrict 能够阻止应用程序使用 procss.binding('process_wrap'), process.kill 和 child_process 的 Nodejs 模块。 代码示例: var restrict = require('restrict'); // ls is whitelisted restrict...
欧拉公式求长期率的matlab代码介绍 pg_restrict是一个扩展,用于限制上的某些SQL命令。 它介绍了类似于超级用户的主角色概念。 甚至超级用户也可以禁止删除数据库和角色(如果不是主角色)。 要求 PostgreSQL 9.3+ ...
mount:表示启动实例、加载数据库并保持数据库的关闭状态 open:表示启动实例、加载并打开数据库,这个是默认选项 force:表示终止实例并重新启动数据库 restrict:用于指定以受限制的会话方式启动
概述 只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库。 在启动数据库之前应该启动监听程序,否则不能利用命令方式来管理数据库,包括启动和关闭数据库。... options为:[FORCE] [RESTRICT] [PFIL
基本用法$ cat ~/.ssh/authorized_keyscommand="/usr/bin/git-restrict repo0 repo1 repo2" ssh-ed25519 AAA...1 user0@machinecommand="/usr/bin/git-restrict repo3 repo0" ssh-ed25519 AAA.Z user1@machine查看...
C 语言restrict 关键字的使用浅谈,需要的朋友可以参考一下