--==============================
-- Oracle 密码文件
--==============================
/*
一、密码文件
作用:主要进行 DBA 权限的身份认证
DBA 用户:具有 sysdba , sysoper 权限的用户被称为 dba 用户。默认情况下 sysdba 角色中存在 sys 用户, sysoper 角色中存在 system 用户
二、 Oracle 的两种认证方式;
1. 使用与操作系统集成的身份验证
2. 使用 Oracle 数据库的密码文件进行身份认证
三、密码文件的位置
Linux 下的存放位置: $ORACLE_HOME/dbs/orapw$ORACLE_SID
即: ORACLE_HOME/dbs/orapw<sid>
Windows 下的存放位置 :$ORACLE_HOME/database/PW%ORACLE_SID%.ora
密码文件查找的顺序
--->orapw<sid>--->orapw--->Failure
两种认证方式:类型与 SQL server 中的 windows 认证和 SQL server 认证
决定在两个参数中
1.remote_login_passwordfile = none | exclusive |shared 位于 $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 参数文件中
none : 不使用密码文件认证
exclusive : 要密码文件认证,自己独占使用 ( 默认值 )
shared :要密码文件认证,不同实例 dba 用户可以共享密码文件
2. $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)
none : 表示关闭操作系统认证,只能密码认证
all : 用于 linux 或 unix 平台,关闭本机密码文件认证,采用操作系统认证,但远程 < 异机 > 可以使用密码文件认证
nts : 用于 windows 平台
不同的组合
1 2
none none sys 用户无论是本机还是远程均不可用
判断当前使用的是操作系统认证还是密码认证
四、演示:
1. 在 sqlnet.ora 中追加 SQLNET.AUTHENTICATION_SERVICES = none */
[oracle@robinson ~]$ sqlplus / as sysdba /* 登陆失败 */
SQL * Plus : Release 10.2.0.1.0 - Production on Fri Apr 9 10 : 41 : 28 2010
Copyright ( c ) 1982 , 2005 , Oracle . All rights reserved .
ERROR :
ORA - 01031 : insufficient privileges
Enter user - name :
--------------------------------------------------------------------------------
[oracle@robinson ~]$ sqlplus sys / redhat as sysdba /* 使用密码文件认证,登陆成功 */
SQL * Plus : Release 10.2.0.1.0 - Production on Fri Apr 9 10 : 42 : 35 2010
Copyright ( c ) 1982 , 2005 , Oracle . All rights reserved .
Connected to :
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning , OLAP and Data Mining options
SQL >
--=================================================================================
2. 将 SQLNET . AUTHENTICATION_SERVICES 的值改为 all
[oracle@robinson admin]$ sqlplus / as sysdba /* 采用本机认证可以登陆 */
SQL * Plus : Release 10.2.0.1.0 - Production on Fri Apr 9 10 : 46 : 55 2010
Copyright ( c ) 1982 , 2005 , Oracle . All rights reserved .
Connected to :
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning , OLAP and Data Mining options
SQL >
--------------------------------------------------------------------------------------
[oracle@robinson admin]$ sqlplus sys / redhat@orcl as sysdba /* 使用密码文件登陆认证失败 */
SQL * Plus : Release 10.2.0.1.0 - Production on Fri Apr 9 10 : 48 : 35 2010
Copyright ( c ) 1982 , 2005 , Oracle . All rights reserved .
ERROR :
ORA - 12641 : Authentication service failed to initialize
Enter user - name :
-- 注:此时可以使用远程登陆。
-- 使用 # 符号将新增的 SQLNET.AUTHENTICATION_SERVICES 行注释掉恢复到缺省值
/*
五、密码文件的建立: orapwd */
[oracle@robinson ~]$ orapwd
Usage : orapwd file =< fname > password =< password > entries =< users > force =< y / n >
where
file - name of password file ( mand ), /* 密码文件的名字 orapw<sid>*/
password - password for SYS ( mand ), /*sys 用户的密码 */
entries - maximum number of distinct DBA and /* 可以有多少个 sysdba,sysoper 权限用户放到密码文件中去,去掉重复记录 */
/* 注意 entries 中存放的个数但不是实际个数,这个是二进制数据 */
force - whether to overwrite existing file ( opt ), /*10g 新增的参数,默认值为 n ,y 表示允许覆盖 */
OPERs ( opt ),
There are no spaces around the equal - to (=) character .
-- 修改密码:
[oracle@robinson ~]$ cd $ORACLE_HOME / dbs
[oracle@robinson dbs]$ ll orapworcl
- rw - r ----- 1 oracle oinstall 1536 Apr 7 15:50 orapworcl
[oracle@robinson dbs]$ orapwd file = orapworcl password = oracle force = y
[oracle@robinson dbs]$ sqlplus sys / oracle@orcl as sysdba
SQL * Plus : Release 10.2.0.1.0 - Production on Fri Apr 9 11 : 34 : 09 2010
Copyright ( c ) 1982 , 2005 , Oracle . All rights reserved .
Connected to :
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning , OLAP and Data Mining options
SQL >
-- 将密码改回原来的密码
[oracle@robinson dbs]$ orapwd file = orapworcl password = redhat
OPW - 00005 : File with same name exists - please delete or rename
[oracle@robinson dbs]$ orapwd file = orapworcl password = redhat force = y
[oracle@robinson dbs]$ rm orapworcl /* 删除密码文件 */
[oracle@robinson dbs]$ orapwd file = orapworcl password = redhat /* 重建密码文件 */
-- 演示将 entries 改为,然后将多个用户设置为 sysdba 或 sysoper
[oracle@robinson dbs]$ orapwd file = orapworcl password = redhat entries = 1
[oracle@robinson dbs]$ strings orapworcl
]/[Z
ORACLE Remote Password file
INTERNAL
F7AC0C5E9C3C37AB
E100B964899CDDDF
-- 创建 PL/SQL 增加个新用户
SQL > begin
2 for i in 1..20 loop
3 execute immediate 'create user u' || i|| ' identified by u' || i|| '' ;
4 end loop ;
5 end ;
6 /
-- 将新用户赋予 sysdba 角色
PL / SQL procedure successfully completed .
SQL > begin
2 for i in 1..20 loop
3 execute immediate 'grant sysdba to u' || i|| '' ;
4 end loop ;
5 end ;
6 /
begin /* 得到和密码文件相关的错误提示 */
*
ERROR at line 1 :
ORA - 01996 : GRANT failed : password file '' is full
ORA - 06512 : at line 3
-- 再次查看 orapworcl 发现多出了行,即当设置为的时候多出了个用户。原因是该密码文件是二进制文件,按矩阵计算可存放多少
[oracle@robinson dbs]$ strings orapworcl
]/[Z
ORACLE Remote Password file
INTERNAL
F7AC0C5E9C3C37AB
E100B964899CDDDF
3E81B724A296E296
668509DF9DD36B43
9CE6AF1E3F609FFC
7E19965085C9ED47
-- 注意不要轻易删掉密码文件,这样会将其他账户的信息也删除
/*
六、导致密码文件内容修改的几种方式:
1. 使用 orapwd 建立,修改密码文件,不建议使用
2. 使用 alter user sys identified by <>
3. 使用 grant sysdba to <> 或 grant sysoper to <> 或 revoke sysdba |sysoper from <>
七、查看密码文件内容 */
[oracle@robinson dbs]$ strings orapworcl
]/[Z
ORACLE Remote Password file
INTERNAL
F7AC0C5E9C3C37AB
E100B964899CDDDF
-- 当 sys 密码不记得可以使用 OS 系统身份认证登陆到 sqlplus, 再使用 alter user 修改密码
SQL > alter user sys identified by oracle ;
User altered
-- 再次查看密码文件与上一次对比,已经发生变化
SQL > ho strings orapworcl
]/[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
-- 通过授予权限来修改密码,密码文件中多出了 scott 的信息
SQL > grant sysdba to scott ;
Grant succeeded .
SQL > ho strings orapworcl
]/[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
SCOTT
F894844C34402B67
-- 注意此处中登陆后,显示的账户信息还是 sys, 而不是 scott, 但此时的 scott 已经具备了 sys 权限
[oracle@robinson dbs]$ sqlplus scott / tiger@orcl as sysdba
SQL * Plus : Release 10.2.0.1.0 - Production on Fri Apr 9 11 : 56 : 09 2010
Copyright ( c ) 1982 , 2005 , Oracle . All rights reserved .
Connected to :
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning , OLAP and Data Mining options
SQL > show user
USER is "SYS"
/*
八、 sysdba 与 sysoper 的区别 */
SQL > select * from system_privilege_map where name like '%SYS%' ;
PRIVILEGE NAME PROPERTY
---------- ---------------------------------------- ----------
- 3 ALTER SYSTEM 0
- 4 AUDIT SYSTEM 0
- 83 SYSDBA 0
- 84 SYSOPER 0
-- 下面的链接是两者不同的权限说明
http :// download . oracle . com / docs / cd / B19306_01 / server .102 / b14231 / dba . htm#sthref137
The manner in which you are authorized to use these privileges depends upon the method of authentication that you use .
When you connect with SYSDBA or SYSOPER privileges , you connect with a default schema ,
not with the schema that is generally associated with your username .
For SYSDBA this schema is SYS ; for SYSOPER the schema is PUBLIC .
-- 两者的 schema 不同
SQL > show user
USER is "SYS"
SQL > conn / as sysoper
Connected .
SQL > show user
USER is "PUBLIC"
-- 查看密码文件视图,可以得到哪些用户为 sysdba, 哪些用户为 sysoper
SQL > select * from v$pwfile_users ;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SCOTT TRUE FALSE
USER1 FALSE TRUE
-- 下面演示了使用不同的角色来登陆
SQL > conn scott / tiger@orcl as sysdba
Connected .
SQL > conn scott / tiger@orcl as sysoper /*scott 的 sysop 列为 false*/
ERROR :
ORA - 01031 : insufficient privileges
Warning : You are no longer connected to ORACLE .
SQL > conn user1 / user1@orcl as sysdba
ERROR :
ORA - 01031 : insufficient privileges
SQL > conn user1 / user1 as sysoper
Connected .
/*
九、更多 */
使用 OEM,SQL*Plus,iSQL*Plus 管理 Oracle 实例
Oracle 实例和 Oracle 数据库 (Oracle 体系结构 )