Oracle管理员认证方式
作者: 不剪发的Tony老师
毕业于北京航空航天大学,十多年数据库管理与开发经验,目前在一家全球性的金融公司从事数据库架构设计。CSDN学院签约讲师以及GitChat专栏作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
数据库管理员DBA通常执行一些特殊操作,如打开与关闭数据库。这些管理操作需要通过两个特殊的系统权限执行:SYSDBA和SYSOPER。
以SYSDBA或SYSOPER权限连接时,连接的是一个默认模式,而不是与当前用户的模式。对于SYSDBA,模式为SYS;对于SYSOPER,模式为PUBLIC。
SQL> conn scott/tiger as sysdba;
Connected.
SQL> show user
USER is "SYS"
数据管理员认证的方式有两种:
l 操作系统OS认证
l 口令文件认证
执行远程数据库管理,需要注意大多数流行的连接协议,如TCP/IP和DECnet,是不安全的。因此需要使用口令文件认证。
1、操作系统OS认证
首先,需要一个操作系统用户,属于OSDBA或OSOPER组。在Windows下,组名称分别为ORA_DBA和ORA_OPER,在“计算机管理”下的“本地用户和组”中可以看到;在Unix下,组名称分别为dba和oper。
设置文件sqlnet.ora。默认位置为%ORACLE_HOME%/network/admin (Windows),$ORACLE_HOME/network/admin (Unix)。
SQLNET.AUTHENTICATION_SERVICES= (NTS) (Windows)
SQLNET.AUTHENTICATION_SERVICES= (ALL) (Unix)
设置初始化参数:REMOTE_LOGIN_PASSWORDFILE=NONE。
可以根据SPFILE生成文本参数文件,然后修改文本文件,再生成SPFILE。
SQL> create pfile from spfile;
编辑文本参数文件。关闭数据库。
SQL> shutdown immediate;
SQL> create spfile from pfile;
SQL> startup;
测试,不需要密码即可登陆。
SQL> conn / as sysdba;
SQL> conn sys/whatever as sysdba; //随便什么口令,不输入也可以
注:此时远程连接不能使用OS认证,但我在VMWARE中创建的两个Windows Server2003却可以远程连接。
SQL> conn /@primary as sysdba
Connected.
其中primary为连接字符串。
使用另一台物理机连接时(TCP/IP),出现以下错误:
SQL> conn /@primary as sysdba
ERROR:
ORA-01031:insuffient privileges
此时,远程管理需要使用口令文件。
2、口令文件认证
首先,使用ORAPWD工具创建口令文件。
orapwd file=’C:/oracle/product/10.1.0/Db_1/database’ password=oracle entries=20
设置初始化参数:REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE。方法参见前文。
将超级用户权限SYSDBA和SYSOPER授予其他用户。
SQL> grant sysdba to scott;
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SCOTT TRUE FALSE
为了测试效果,可以先禁用操作系统认证方式。编辑sqlnet.ora文件:
SQLNET.AUTHENTICATION_SERVICES= (NONE)
测试,本地连接方式:
SQL> conn sys/whatever as sysdba //操作系统认证方式被禁用
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL> conn sys/oracle as sysdba //口令文件认证
Connected.
SQL> conn scott/tiger as sysdba; //注意登录用户为SYS
Connected.
SQL> show user
USER is "SYS"
测试,远程连接方式:
SQL> conn sys/oracle@primary as sysdba
Connected.
SQL> conn scott/tiger@primary as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> conn scott/tiger@primary //以scott登录
Connected.
SQL> show user
USER is "SCOTT"