本帖最后由 zcs0237 于 2013-8-13 14:10 编辑
a.欢迎对本帖补充、建议、更正
b.测试环境rhel5.4+Ora10.2.0.1.0
c.为节省篇幅,部分输出结果做了精简
************************************************第01部分 服务器端OS认证(默认启用)
01.1-以安装Oracle的用户登录OS
不论输入什么用户,只要以sysdba权限连接数据库,都可以连接上,并且连接用户是sys。
有时候,如果忘记了数据库的密码,而又想登录数据库,可以通过这种方式,前提是在数据库服务器上。
SQL> connect / as sysdba
Connected.
SQL> connect sys/aaa as sysdba
Connected.
SQL> connect sys/bbb as sysdba
Connected.
SQL> connect aaa/bbb as sysdba
Connected. //哪怕这个用户如aaa在数据库中根本不存在
SQL> show user
USER is "SYS"
SQL> alter user sys identified by install;
User altered.
SQL> connectsys/install@192.168.188.128:1521/orcl
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
SQL> connectsys/install@192.168.188.128:1521/orclas sysdba
Connected.
SQL> show user
USER is "SYS"
01.2-以非安装oracle用户登录OS
# su – oracle
$ sqlplus / as sysdba
SQL> show parameter auth
NAME TYPE VALUE
---------------- ---------- -------
os_authent_prefix string ops$
remote_os_authent boolean FALSE
SQL> create user ops$zcs1 identified by oracle;
User created.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
$exit
# useradd -g oinstall -G dba zcs1
# echo oracle|passwd --stdin zcs1
# su - zcs1
$ export ORACLE_SID=orcl
$ export ORACLE_BASE=/u01/app/oracle
$ export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
$ export PATH=$ORACLE_HOME/bin:$PATH
$ sqlplus / as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
SQL>
01.3-屏蔽OS认证(以linux为例)
OS 认证有一定安全隐患,可以把相关系统用户删除,也可以修改sqlnet.ora文件。
在删除密码文件后,若想要以管理员身份连入数据库的话,则必须使用操作系统验证的方法进行登录。
$ cd $ORACLE_HOME/network/admin;ls sqlnet.ora
ls: sqlnet.ora: No such file or directory
$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora
$ sqlplus / as sysdba //提示,需输入正常的用户名和密码
ORA-01031: insufficient privileges
Enter user-name:
$cd $ORACLE_HOME/network/admin
$mv sqlnet.ora sqlnet.ora.bak //重新启动用OS认证
************************************************第02部分 密码文件认证
在Oracle中,用户如果要以特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle数据库可以有两种身份验证的方法:
一、使用与OS集成的身份验证
OS认证意思把登录数据库的用户和口令校验放在了OS一级。
当sys密码不记得可以使用OS系统身份认证登陆到sqlplus,再使用alter user修改密码。
二、使用Oracle数据库的password file进行身份验证
由于仅被授予SYSOPER/SYSDBA系统权限的用户才存在于密码文件中,由此,向密码文件中增加或删除某一用户,实际上也就是对某一用户授予或收回SYSOPER/SYSDBA系统权限。
三、创建密码文件的命令
不管是在创建实例时自动创建的密码文件,还是使用手工创建的密码文件,都只包含INTERNAL/SYS用户的信息;
orapwd file=orapworcl password=oracle force=y
orapwd file=>
password=< sys用户的密码>
entries=
force=
02.1-创建密码文件
在实际开发中,要把操作系统验证给取消掉,那以后就会采用密码验证了。但是假如我们把密码忘记了,又如何解决呢:重新生成密码文件即可。
一、使用orapwd建立,修改密码文件
$ cd $ORACLE_HOME/network/admin
$ mv sqlnet.ora.bak sqlnet.ora
$ strings sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=(NONE)
$ sqlplus / as sysdba
ORA-01031: insufficient privileges
Enter user-name:
$ cd $ORACLE_HOME/dbs
$ ls orapw*
orapworcl
$ strings orapworcl|grep -i test
TEST
$ orapwd file=orapworcl password=redhat //重建密码文件修改密码
OPW-00005: File with same name exists - please delete or rename
$ orapwd file=orapworcl password=oracle force=y //改密码
$ strings orapworcl|grep -i test
$ sqlplus sys/oracle as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
二、扩展密码文件的用户数量
当向密码文件添加的帐号数目超过创建密码文件时所定的限制时,为扩展密码文件的用户数限制,需重建密码文件。
$ orapwd file=orapworcl password=redhat entries=1
$ strings $ORACLE_HOME/dbs/orapworcl
]\[Z
ORACLE Remote Password file
INTERNAL
F7AC0C5E9C3C37AB
E100B964899CDDDF
//INTERNAL是SYS用户名和SYSDBA权限的一个别名。
SQL> begin
for i in 1..6 loop
execute immediate 'create user u'||i||' identified by u'||i||'';
end loop;
end;
/
PL/SQL procedure successfully completed.
SQL> begin
for i in 1..6 loop
execute immediate 'grant sysdba to u'||i||'';
end loop;
end;
/
begin
*
ORA-01996: GRANT failed: password file '' is full
ORA-06512: at line 3
SQL> host strings $ORACLE_HOME/dbs/orapworcl
]\[Z //再次查看orapworcl发现多出了行,该二进制文件按矩阵计算可存放多少
ORACLE Remote Password file
INTERNAL
F7AC0C5E9C3C37AB
E100B964899CDDDF
三、查看密码文件放了多少个sysoper/sysdba用户
可以通过查询视图V$PWFILE_USERS来获取拥有SYSOPER/SYSDBA系统权限的用户的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用户是否拥有相应的权限。这些用户也就是相应地存在于密码文件中的成员。
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
zcs FALSE TRUE
U1 TRUE FALSE
U2 TRUE FALSE
U3 TRUE FALSE
02.2-使用密码认证
一、创建密码文件
$ cd /u01/app/oracle/product/10.2.0/db_1/dbs
$ orapwd file=orapworcl password=redhat force=y
$ strings orapworcl
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
二、开启密码文件认证
cd $ORACLE_HOME/network/admin; //开启密码文件认证
echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora
三、通过授权sysdba,密码文件中增加scott的信息
REMOTE_LOGIN_PASSWORDFILE初始化参数文件中,此参数控制着密码文件的使用及其状态 (NONE:不使用密码文件,特权用户的登录通过OS进行身份验证) 。
1、SHARED(密码文件可多实例使用, 仅INTERNAL/SYS能特权登陆)
shared口令文件不能被编辑。即不能向shared口令文件增加用户。如果要增加用户或修改sysdba、sysoper用户的密码,需要设置REMOTE_LOGIN_PASSWORDFILE参数为exclusive然后再设置为shared。
SQL>alter system set remote_login_passwordfile=shared scope=spfile;
System altered. //改为shared
SQL>startup force;
ORACLE instance started. //为了使修改生效,重启数据库
SQL>alter user sys identified by system;
ERROR at line 1: //修改sys用户的口令
ORA-28046: Password change for SYS disallowed
SQL>grant sysdba to scott;
ERROR at line 1: //为scott用户授予sysdba权限
ORA-01999: password file cannot be updated in SHARED mode
2、EXCLUSIVE(只有一个数据库实例可以使用此密码文件)
只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息。
SQL>alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered. //改为exclusive
SQL> show parameter remote_login_passwordfile
remote_login_passwordfile EXCLUSIVE
SQL>startup force;
ORACLE instance started. // 为了使参数生效,重启数据库
SQL>alter user sys identified by system;
User altered. // 修改sys用户的密码
SQL>grant sysdba to scott;
Grant succeeded. //为scott用户授予sysdba权限
SQL> host strings orapworcl
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
SCOTT
7AA1A84E31ED7771
四、禁用OS认证
$ cd $ORACLE_HOME/network/admin
$ ls sqlnet.ora
ls: sqlnet.ora: No such file or directory
$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora
$ sqlplus / as sysdba //提示,需输入正常的用户名和密码
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
五、登陆后显示的账户信息是sys,而非scott
$ sqlplus scott/tiger as sysdba
SQL> show user
USER is "SYS"
************************************************第03部分 使用字典认证(非DBA)
只有在数据库run状态下普通用户连接上数据库时通过存储在字典表中的用户口令来进行鉴权认证。
03.1-创建用户并授授予SYSDBA权限
$ sqlplus / as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
SQL> select INSTANCE_NAME,STATUS from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
orcl OPEN
SQL> create user ZCS identified by ZCS;
User created.
SQL>select USERNAME,PASSWORD from dba_users where USERNAME='ZCS';
USERNAME PASSWORD
------------------------- ---------------------
ZCS 8C4FBF9DAA31F429
SQL> grant create session to zcs;
Grant succeeded.
03.2-禁用密码认证并删除密码文件
SQL> show parameter remote_login_passwordfile
remote_login_passwordfile EXCLUSIVE(默认)
SQL>alter system set remote_login_passwordfile=NONE scope=spfile;
System altered. //禁用密码认证
SQL>startup force;
ORACLE instance started. //为了使修改生效,重启数据库
SQL>host
$cd $ORACLE_HOME/dbs/
$mv orapworcl orapworcl.bak
03.3-禁用OS认证(密码完成正确才能登录)
客户端网络配置文件sqlnet.ora中的参数用来决定是采用OS层面的鉴权认证还是密码文件的鉴权认证。
$ cd $ORACLE_HOME/network/admin;ls sqlnet.ora
ls: sqlnet.ora: No such file or directory
$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora
03.4-使用数据字典认证登陆
$exit
exit
SQL> conn zcs/zcs
Connected
************************END***************************
oracle知识点精简总结系列持续增加中:
Oracle用户及用户配置文件精简总结http://www.itpub.net/thread-1775065-1-1.html
Oracle的登陆认证方式精简总结http://www.itpub.net/thread-1774785-1-1.html
实例恢复相关原理精简总结http://www.itpub.net/thread-1761630-1-1.html
Oracle权限精简总结http://www.itpub.net/thread-1775562-1-1.html
Oracle角色精简总结
http://www.itpub.net/thread-1775924-1-1.html