关于 SQLNET.AUTHENTICATION_SERVICES 验证方式的说明

今天去客户那里巡检,客户提出为了提高数据库安全性考虑,需要修改sys/system密码,并通过数据库验证方式来取代默认的操作系统方式,现在我来把这两种验证方式总结一下。

操作系统验证,即通过操作系统账户的权限访问数据库,举个例子,如果已经拥有了windows下的系统管理员administrator的权限,那么当采用该方式验证的话,无需输入用户/密码就可以访问,比如:sqlplus / as sysdba;哪怕是任意输入的用户名和密码,也无所谓,比如:sqlplus abc/efg as sysdba;

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:02:25 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> exit

从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 断开

C:\Documents and Settings\Administrator>sqlplus abc/efg as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:02:33 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

当然,这仅限于sys用户,对于其他用户,哪怕是system,也是必须输入用户名和密码才能访问数据库的

C:\Documents and Settings\Administrator>sqlplus system/123456

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:05:07 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

ERROR:

ORA-01017: 用户名/口令无效; 登录被拒绝

请输入用户名:

我的环境中,默认sys和system用户的密码都是"oracle",数据库sys用户的密码,是存放在PWD<SID>.ora中的(Unix/Linux中为oraPW<SID>),想知道sys用户是否有密码,可以通过以下语句查询:

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

显然,对于采用操作系统验证来访问数据库,安全性还是有一定隐患的,通常在大公司,SA和DBA都是分权管理的,如果数据库因为采用了操作系统验证方式,而使SA可以随意访问数据库那也是不太合适的。基于这种场景,那么我们就可以采用数据库验证方式来限制sys用户必须输入正确的用户名和密码才能够访问数据库。这样的话,当SA没有DBA的sys密码,就无法访问数据库了。

在windows中,是通过sqlnet.ora这个文件来实现验证机制控制的,当你装完数据库并用netca创建了监听,就会生成这个文件,通常默认是以下内容:

# This file is actually generated by netca. But if customers choose to

# install "Software Only", this file won‘t exist and without the native

# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES = (NTS)

也就是说,默认就是采用操作系统验证的,也许Oracle认为,拥有了SA权限,就拥有了系统最高权限,所以数据库DBA的sys用户也无需再验证密码了

如果设置成(NONE),就表示采用数据库身份验证,还可以设置成(NONE,NTS),其实这样设也没有意义了,只要括号中有NTS,就会采用操作系统验证,NONE就没有用了

这里要指出一点,有些文章中说还可以设置成(ALL),但我设计测试下来,如果设置成(ALL),会提示ERROR:

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:26:06 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

ERROR:

ORA-12641: 验证服务无法初始化

请输入用户名:

如,以下这段描述:

Use the parameter SQLNET.AUTHENTICATION_SERVICES to enable one or more authentication services.

If authentication has been installed,it is recommended that this parameter be set to either none or to one of the authentication methods.

NONE for no authentication methods. A valid username and password can be used to access the database.

ALL for all authentication methods

NTS for Windows NT native authentication(An authentication method that enables

a client single login access to a Windows NT server and a database running on the server)

虽然这里说到了有ALL,不过我亲自测试过,确实不行,也许和版本有关,我的版本是10.2.0.1 windows 32bit的

--修改为(NONE)后登陆

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:50:49 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

ERROR:

ORA-01031: 权限不足

请输入用户名:  sys as sysdba

输入口令: --此处输入正确的密码“oracle”

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

--断开连接,把(NONE)改为(NTS)直接连接

SQL> disc

从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 断开

SQL> conn abc/123 as sysdba

ERROR:

ORA-01031: 权限不足

由于没有退出SQLPLUS,刚才改的(NTS)还未生效,可见sqlnet.ora文件是在进入SQLPLUS时才去读取的

--仍然保持(NTS),退出SQLPLUS后重新登陆

SQL> exit

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:54:52 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

现在又是操作系统验证了

注意,如果改成(NONE)以后,当使用RMAN时,system用户就不能操作了,输入正确的密码也不行,只有sys用户并输入密码才可以,测试如下:

--设置为(NTS)的时候登陆RMAN

C:\Documents and Settings\Administrator>rman target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:02:07 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到目标数据库: ORCL10G (DBID=1041171248)

RMAN> exit

恢复管理器完成。

C:\Documents and Settings\Administrator>rman target system/oracle

恢复管理器: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:02:33 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到目标数据库: ORCL10G (DBID=1041171248)

RMAN> exit

恢复管理器完成。

--修改为(NONE)后,再用密码登陆一次RMAN

C:\Documents and Settings\Administrator>rman target system/oracle
--注意,这里密码是正确的

恢复管理器: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:03:06 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00554: 内部恢复管理器程序包初始化失败

RMAN-04005: 目标数据库中存在错误:

ORA-01031: 权限不足

C:\Documents and Settings\Administrator>rman target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:08:47 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00554: 内部恢复管理器程序包初始化失败

RMAN-04005: 目标数据库中存在错误:

ORA-01031: 权限不足

C:\Documents and Settings\Administrator>rman target sys/oracle

恢复管理器: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:03:16 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到目标数据库: ORCL10G (DBID=1041171248)

RMAN>

很显然,在采用数据库身份验证以后,system用户被禁止使用RMAN了,只有拥有数据库最高权限的sys用户,才能登陆RMAN,而且必须是输入密码的方式登陆

总结:

在windows下,SQLNET.AUTHENTICATION_SERVICES必须设置为NTS才能使用OS认证,不设置(如,把该行语句加#注释符号)或者设置为其他任何值都不能使用OS认证。

主要是以下几种情况:

1. sqlnet.ora文件为空,或用#注释掉              --基于Oracle密码文件验证

2. SQLNET.AUTHENTICATION_SERVICES = (NTS)       --基于操作系统验证

3. SQLNET.AUTHENTICATION_SERVICES = (NONE)      --基于Oracle密码文件验证

4. SQLNET.AUTHENTICATION_SERVICES = (NONE,NTS)  --基于操作系统验证(前后顺序颠倒也一样)

注意:默认情况下,Unix/Linux下的sqlnet.ora文件是没有SQLNET.AUTHENTICATION_SERVICES参数的,似乎连sqlnet.ora这个文件也没有,这和windows有很大的不同

此时是操作系统验证和Oracle密码验证并存,如果加上SQLNET.AUTHENTICATION_SERVICES这个参数后,不管是设置为(NONE)、(NTS)或(NONE,NTS),都是基于Oracle密码验证。

时间: 2024-10-22 02:57:39

关于 SQLNET.AUTHENTICATION_SERVICES 验证方式的说明的相关文章

ASP.net的身份验证方式有哪些?

[转] ASP.net的身份验证方式有哪些?分别是什么原理? Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个 web应用就会连同这个身份Cookie一起发送到服务端.服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了. 问

Windows下搭建Openvpn使用用户名和密码验证方式如何引用shell脚本

网上找了很多资料关于Openvpn使用用户名和密码验证方式的大都是在linux环境下搭建的.其实在windows下搭建可以参考linux的情况,可以找到很多资料,主要遇到的问题是如何引用那个checkpw.sh的shell脚本.这里记下自己的经验. 为了引用此脚本,看了网上一个博客后有了点idea.首先安装Cygwin,Cygwin是一个在windows平台上运行的类UNIX模拟环境.之后写一个bat文件,如script.bat: C:/cygwin64/bin/bash.exe  C:/che

Yii2在Form中处理短信验证码的Validator,耦合度最低的短信验证码验证方式

短信验证码在目前大多数web应用中都会有,本文介绍一个基于Yii2 Validator方式的验证码验证方式. 在其他文章中看到的方式大多比较难做到一次封装,多次重用. 使用此方式的好处自然不用多说,Validator支持在Model和Form中使用,使用的时候只需要在rules中添加一条验证规则即可. 第一步: 准备数据表,用来存储短信验证码 CREATE TABLE `tbl_sms_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `to` varch

Integrated Security 身份验证方式

server=localhost;database=Northwind; integrated security=SSPI Microsoft安全支持提供器接口(SSPI)是定义得较全面的公用API,用来获得验证.信息完整性.信息隐私等集成安全服务,以及用于所有分布式应用程序协议的安全方面的服务.应用程序协议设计者能够利用该接口获得不同的安全性服务而不必修改协议本身. Integrated Security 身份验证方式 当为false时,将在连接中指定用户ID和密码. 当为true时,将使用当

《Java从入门到放弃》入门篇:Struts2的常用验证方式

感觉过了一个周末,人都懒得不要不要的,今天就来点简单的内容吧 - -,各位看官如果欲求不满的话,可以自行解决或再去宠幸其他"勃主"··· struts2的验证方式主要有四种方式: 一.直接在功能方法中写验证代码(不要扔鸡蛋,这种办法确实算一种) 二.重写validate方法(注意这个方法会验证该类中所有的方法) 三.使用ValidateXxx方法(Xxx对应要验证的方法的方法名) 四.用struts2的验证框架(也就是使用配置文件的方式来实现,这种方法个人觉得应该属于放弃篇的内容,为什

服务器身份验证方式

服务器身份验证方式: 1.是基于Cookie的身份验证,使用服务器端的cookie来对每次请求的用户进行身份验证. 2. 较新的方法,基于令牌Token-Based的认证,依赖于被发送到服务器上每个请求的签署令牌. 为什么基于令牌token-based的方式更好呢?理由如下:1.跨域 / CORS: cookies + CORS 并不能跨不同的域名.而基于令牌能够使用 AJAX 调用服务器,在任何域名下你都可以使用HTTP header头部来传输用户信息. 2. 无态(代表服务器端可伸缩): 没

如何更改SQL Server 2008 登陆验证方式

配置SQL Server的身份验证方式 在 默认情况下,SQL Server 2005 Express是采用集成的Windows安全验证且禁用了sa登录名.为了工作组环境下不使用不方便的 Windows集成安全验证,我们要启用SQL Server 2005 Express的混合安全验证,也就是说由SQL Server来验证用户而不 是由Windows来验证用户. 1.使用SQL Server Management Studio Express. 当 我们启动SQL Server Manageme

WebService的几种验证方式

转 http://www.cnblogs.com/yoshiki1895/archive/2009/06/03/1495440.html WebService的几种验证方式 1.1      WebService设计 1.1.1   传输基本参数 1.1.2   传输数据集合 (1)     数组 (2)     DataSet 1.2      WebService异常处理 1.3      WebService性能 1.4      WebService认证 请参考WebService认证学

笨鸟先飞随笔:ADO.NET中VS连接Sqlserver数据库的代码(Windows身份验证方式补充)

上一篇只写到了数据库Sqlserver连接方式下的连接代码在这里对Windows验证方式的连接做一下补充: 关于VS连接Sqlserver数据库windows验证方式的操作方式: 01.VS窗口中上方菜单依次选择数据 02.添加新数据源 03.然后选择数据库后点击下一步 如下图所示: 04.选择数据集然后点击下一步 如下图所示: 05.点击新建连接,弹出对话框 如下图所示: 06.数据源显示为Microsoft SQL server SqlClient 如果不是则需要点击更改修改为Microso