网络中在以normal、sysdba、sysoper不同身份登陆oracle的时候感觉很模糊!!很晕!
我觉得还是oracle登陆原理没有理解清楚!!
前面简单啰嗦两句请给个场地,
首先讲讲oracle 具有sysdba权限的两个账号
oracle 在创建database的时候都会有两个默认用户帐号:
system和sys默认的口令为:manager和change_on_install 同时也授予两个用户DBA角色的权限
sys、system账号oracle存储拥有数据库的数据字典对象(基表和视图),所以他们的完整性非常重要!!所以建议这个两个账号一定的修改密码,权限管理的时候一定要慎重赋予权限。
不知道大家用过dbca 创建数据库进行到配置阶段的时候oracle 要求必须更改默认的口令(oracle 9i 9.1.0.1中不要求更改!!有资料这样说,本人没有这个版本所以只有不知道了!!)这样我们也就知道为什么oracle需要更改密码了!当然我们在后面还会用到oracle系统与操作系统之间关系会进一步os验证这一点(修改密码的重要性!)
插曲
(
首先我应该分清权限和角色,大致讲讲
权限
racle提供两种权限(系统权限sys privileges和对象权限object privileges)
角色:是具有名称的一组系统权限和对象权限的集合
这里不着重研究这个)
正题:
我们看看oracle到底什么怎么一个登陆原理
那么我们看看oracle 把sysdba、sysoper分别的赋予那些管理权限
sysdba权限:
●启动和关闭操作
●更改数据库状态为打开/装载/备份,更改字符集
●创建数据库
●创建服务器参数文件spfile
●日志归档和恢复
●包含了“会话权限”权限
sysoper权限:
●启动和关闭操作
●更改数据库状态为打开/装载/备份
●创建服务器参数文件SPFILE
●日志归档和恢复
●包含了“会话权限”权限
以上后面的验证演示的时候会有说明,这里是把相应结论丢出来先睹为快。
了解这些后我们还必须搞清楚两个地方:一、DBA用户的身份验证机制;二、osdba和osoper组。
以便后面我们登陆中的常见问题有更清楚理论支持。。
一、DBA用户的身份验证机制
○ 本地DBA用户的身份验证机制
○ 远程DBA用户的身份验证机制
二、osdba和osoper组
注意:是不是在操作系统创建用户组就是osdba和osoper呢?不是这里的OS代表的操作系统含义。在windows系统下面应该是ora_dba(数据库创建时会默认建立该组而且会默认把administrator加入该组,这里也就说明了为什么有人用administrator或者具有administrator权限的用户就可以登陆数据库的原因)和ora_oper(这个我至今没有发现)。有资料说在除windows外的OS又有所不同(这个没有环境,有环境的时候在研究看看!呵呵!!)
有人讨论oracle这样设计那oracle还有什么安全感??
有人问是不是oracle设计的时候的一个bug??
我觉得不是。
我觉得这样设计有他的道理,数据库作为一个软件附载到操作系统上面,操作系统安全都有问题了??数据库还能安全??
在这里也同时有了个一铁的证据说明在创建数据库的为什么要要求用户更改密码了,西西!
理论的东西基本上就是这些,接下来做做实验来进一步验证这些理论好了。
▲ 讲到在创建数据库的时候需要更改密码,如果要体会的话可以自己装一下数据库就知道了,呵呵!!环境不允许重装!!相信我说的绝对没错!!哈哈!!
▲ 需要认真验证的是:为什么sysdba身份可以随意本地登陆
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C
ocuments and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 8月 12 20:37:37 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: administrator/ssss@dber as sysdba
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL>这里需要说明的在连接的时候如果用了ora_dba组下面的用户需要随意给定一个密码,要求不能为空!不信我在实验一次!
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C
ocuments and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 8月 12 20:40:54 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: administrator/djajdjafljl@dber as sysdba
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL>
原因分析:就是我们的数据库创建了osdba组
验证呢???
ora_dba组图片.JPG (112.92 KB, 下载次数: 10)
2008-8-13 13:03 上传
当然sysdba身份可以关闭启动数据,更改数据状态这个就更好验证了
先创建一个普通用户
C
ocuments and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 8月 12 20:55:35 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: sys/sys@dber as sysdba
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL> create user "test" identified by "123" password expire;
用户已创建
SQL> grant "connect" to "test";
grant "connect" to "test"
*
ERROR 位于第 1 行:
ORA-01919: 角色'connect'不存在 --需要大写
SQL> grant "CONNECT" to "test";
授权成功。
SQL> grant "RESOURCE" to "test";
授权成功。
SQL> grant "DBA" to "test";
授权成功。
SQL> alter user "test" defult role "CONNECT","RESOURCE","DBA";
alter user "test" defult role "CONNECT","RESOURCE"
*
ERROR 位于第 1 行:
ORA-00922: 缺少或无效选项
SQL> alter user "test" default role "CONNECT","RESOURCE","DBA";
用户已更改。
SQL>
然后实验关闭数据库服务器
C
ocuments and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 8月 12 20:55:35 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: test/123@dber as sysdba
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL> shutdown normal;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
成功验证前面的理论!!其他结论环境有限试验不了。给大家抛砖引玉了。。
▲需要验证的是:为什么sys不能以normal身份登陆
同样以上为例子来实验以normal登陆
C
ocuments and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 8月 12 21:14:54 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: test/123@dber
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
数据库未完全打开!
请输入用户名: sys/sys@dber as sysdba
已连接到空闲例程。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> connect test/123@dber ;
ERROR:
ORA-01017: invalid username/password; logon denied
警告: 您不再连接到 ORACLE。
说明了sys没有赋予normal的权限
SQL>
分析原因:sys用户是oracle默认的DBA用户.当以normal身份登陆时,其验证方式是由oracle来完成的.
▲需要验证的是:为什么administrator不能以sysoper身份登陆
同样以上为例子来实验以sysoper登陆
C
ocuments and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 8月 12 21:23:17 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: administrator/dddk@dber as sysoper
ERROR:
ORA-01031: insufficient privileges
请输入用户名:
分析原因:这个很好解释因为windows没有分配ora_oper组出来
那我分配一个在实验一下呢??
C
ocuments and SettingsAdministrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 8月 12 21:27:33 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: administrator/dhahdfa@dber as sysoper
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL>连接成功得到铁的证实!!呵呵!!
▲需要验证的是:为什么远程客户机登陆只能以sysdba和sysoper身份登陆
这个例子没有办法实验因为我只有服务端,看帖的可以自己实验一下.
分析原因:这个跟oracle验证机制有关,当远程客户机要访问oracle server的时候
采用的连接是非安全的,这个是oracle交给了我们的口令文件进行验证!!
在oracle的初始化参数中有一个特殊参数决定远程客户机器登陆是否通过口令文件验证:remote_login_passwordfile 默认值:exclusive,表示允许使用口令文件进行验证
当然这里默认值有三个:
none:表示不使用口令文件;
exclusive: 表示口令文件验证,每个数据库单据使用自己的口令文件,具有sysdba 或sysoper 权限的用户都采用口令文件验证
shared:口令文件验证,多个数据库可以公用一个口令文件,但口令文件中只能加入sys用户,只有SYS用户可以被验证.
其实DBA刚刚也学习过理论了验证分两步:一个是远程 一个是本地
相信大家看到这里也不需我在什么验证了,呵呵!!呵呵!!呵呵!!
总结一下整个登陆过程:
本地登陆过程为:登陆的时候首先判断我们network中sqlnet.ora文件使用nts吗?
如果否这判断remote_login_passwordfile参数进行口令验证,如果是这判断是否符合ora_dba和ora_oper 否表示权限不够,是着通过登陆成功!!
远程登陆过程:首先判断安全的连接吗? 是则判断network中sqlnet.ora文件使用nts吗?如果否这判断remote_login_passwordfile参数进行口令验证,如果是这判断是否符合ora_dba和ora_oper 否表示权限不够,是着通过登陆成功!! 否则进行口令验证处理!!
其实说了那么多总结一句话就是:normal、sysoper、sysdba 就是oracle简单权限管理。
以上就是个人的学习心得,希望大家指正!!
[本帖最后由 xsmdel 于 2009-3-1 15:16 编辑]