Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60629
  • 博文数量: 22
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-16 16:44
文章分类

全部博文(22)

文章存档

2014年(14)

2012年(1)

我的朋友

分类: Oracle

2014-05-20 20:25:17

Oracle身份验证

1.      口令身份验证

常用方式。

在使用 SQL*Plus 时,通过口令身份验证进行连接的语法如下:

      CONNECT username / password @db_alias ]

      这是 Oracle 一般用户使用得最多的一种身份验证方式。在使用口令身份验证进行连接时,实例将针对在数据字典中的用户账户存储的口令。验证给定的口令。为此,数据库必须处于打开状态;从逻辑上讲,在使用口令身份验证连接时,不可能发出 STARTUP 命令或者 SHUTDOWN 命令。不允许 SYS 用户以口令身份验证的方式进行连接,SYS 只能使用口令文件、操作系统或LDAP 身份验证。

用户名区分大小写,除非在双引号中指定,否则将自动转换为大写字母。

11G版本之前,口令不区分大小写。11G中默认口令区分大小写,可以通过调整参数sec_case_sensitive_logon,调整数据库是否密码大小写敏感。

用户连接数据库默认有10次匹配密码机会

SQL> select * from dba_profiles where resource_name like 'FAILED_LOGIN_ATTEMPTS%';

        

PROFILE                        RESOURCE_NAME                    RESOURCE_TYPE LIMIT

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

DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD      10

MONITORING_PROFILE             FAILED_LOGIN_ATTEMPTS            PASSWORD      UNLIMITED

2.      口令文件身份验证

一般供管理员使用

要为账户启用操作系统和口令身份验证(二者是相配的),必须为用户授予 SYSDBA 或者 SYSOPER 权限:

      GRANT [ sysdba  | sysoper ]  TO username ;

      如果向用户授予这些权限之一或者所有权限,则会将用户口令从数据字典复制到外部口令文件中,此时,即使数据库未处于打开状态,实例也可以读取口令。

      要使用口令文件身份验证,用户可以在使用 SQL*Plus 时通过以下语法连接:

      CONNECT username / password [ @db_alias ] AS [ SYSOPER | SYSDBA ] ;

      注意,可使用口令文件身份验证,通过 Oracle Net 连接到远程数据库。

      SYSDBA SYSOPER 以同一种方式运行的第三种权限是 SYSSAM,此权限仅适用于 ASM 实例。

   查看使用口令文件进行身份验证的用户列表:

SQL> select * from v$pwfile_users;

 

USERNAME                       SYSDB SYSOP SYSAS

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

SYS                            TRUE  TRUE  FALSE

 

实验本机口令身份验证登陆。

若在本机使用口令身份验证登陆数据库,需要禁用操作系统验证,否则默认使用操作系统验证登陆,参数SQLNET.AUTHENTICATION_SERVICES设置为NONE,为禁止操作系统验证。

 

oracle@RH5x64_[/home/oracle/app/product/11.2.0/db_1/dbs]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jul 24 22:52:02 2013

 

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

 

ERROR:

ORA-01031: insufficient privileges

 

 

Enter user-name:

oracle@RH5x64_[/home/oracle/app/product/11.2.0/db_1/dbs]$

oracle@RH5x64_[/home/oracle/app/product/11.2.0/db_1/dbs]$ sqlplus sys/oracledba as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jul 24 22:52:11 2013

 

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

 

Connected to an idle instance.

 

SQL> exit

Disconnected

oracle@RH5x64_[/home/oracle/app/product/11.2.0/db_1/dbs]$ sqlplus test/test as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jul 24 22:52:23 2013

 

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

 

Connected to an idle instance.

 

SQL> show user

USER is "SYS"

         被赋予SYSDBA身份的用户,连接进数据库后查看用户为SYS用户

 

3.      操作系统身份验证

一般供管理员使用

要使用操作系统身份验证,用户必须被确认为有权限访问 Oracle 二进制文件的操作系统用户之后,且在使用 SQL*Plus 时通过以下语法连接之前首先登陆到数据库服务器:

      CONNECT / AS [ SYSOPER | SYSDBA ] ;

 

1)配置SQLNET.ORA文件

参数NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)表明解析客户端连接时所用的主机字符串的方式。

TNSNAMES表示采用TNSNAMES.ORA文件来解析;

ONAMES表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMES;

HOSTNAME表示使用host文件,DNSNIS等来解析;

参数SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS,ALL)表明用户连接Oracle服务器时使用哪种验证方式

NONE表示Oracle数据库身份验证,

NTS表示操作系统身份验证

ALL表示两种方式可以并用。

注:

NTS只在WINDOWS系统起作用配置为ALL无法使用操作系统验证方式;

LINUX配置为NTS提示报错需要配置为ALL或者不配置该参数。

 

2)建立相应的操作系统组及用户加入该组

ORA_DBA组中的域用户和本地用户不需要Oracle用户名和密码就可以登录Oracle而且该组的用户登录数据库后都具有SYSDBA权限(多个实例时,可以建立类似这样的组ORA_SID_DBA,其中SID指实例名)同理:ORA_OPER组中的成员具有SYSOPER角色的权限。

 

3)登录方式

C\>sqlplus / as sysdba

或者C\>sqlplus nolog,然后SQL>connect / as sysdba

 

4init.ora中的Remote_Login_Passwordfile对身份验证的影响。

SQL> show parameter remote_login

 

NAME                                 TYPE        VALUE

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

remote_login_passwordfile            string      EXCLUSIVE

三个可选值:

NONE

默认值,指示Oracle系统不使用密码文件,通过操作系统进行身份验证的特权用户拥有SYSORASYSOPER权限.

EXCLUSIVE

1).表示只有一个数据库实例可以使用密码文件;

2).允许将SYSORASYSOPER权限赋值给SYS以外的其它用户。

SHARED:

1).表示可以有多个数据库实例可以使用密码文件;

2).不允许将SYSORASYSOPER权限赋值给SYS以外的其它用户。

所以,如果要以操作系统身份登录,Remote_Login_Passwordfile应该设置为NONE

 

5)外部身份验证操作系统身份验证

登录用户不是ORA_DBA组和ORA_OPER组成员时,登录数据库需要在Oracle中创建当前操作系统用户相同的用户名,如果当前用户是域用户,则名称为:domainname\yourname,如果是本地计算机用户,则名称为:computername\yourname

创建方法:

create "domainname\yourname" identified externally;

grant connect to "domainname\yourname";

Windows操作系统,修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HO

ME0下面添加AUTH_PREFIX_DOMAIN,值设为FALSE,在创建Oracle用户时可以忽略掉域名。这种方式下,init.ora中有一个参数将影响数据库如何匹配一个windows用户和Oracle用户os_authent_prefix = ""缺省为空,Oracle8i以前,无该参数,而使用OPS$作为用户名前缀.(Oracle用户名最大长度限制为30个字符)

 

6)远程客户端使用操作系统验证

首先需要在init.ora文件中设置如下参数:REMOTE_OS_AUTHENT=TRUEOracle不推荐在远程客户端上使用操作系统验证,因为客户端验证时不是通过服务器上的操作系统用户来验证,而是使用客户端自己怕操作系统来进行windows验证,这样,客户端可以采用建立对应的windows机器名和用户名的方式来欺骗Oracle的操作系统验证。

例如:创建了如下Oracle用户

create "zl\zyk" identified externally;

grant connect to "zl\zyk";

如果有一台名为ZL的机器,创建了一个名为zyk的用户,并以此登录连接Oracle服务器(连接时使用\@OracleSTR,无需用户名和密码造成此问题的原因是,Oracle使用客户端操作系统进行验证,它无法区别zl是域名还是机器名。

Oracle数据库服务器上的windows身份认证很容易实施,并且使已登录的用户访问数据库很方便但是,这种验证模型并不适合远程客户端,因为安全隐患太大。

 

4.      外部身份验证

       如果使用外部身份验证创建用户账户,Oracle 会将身份验证委托给外部服务。它不会提示输入口令。如果为启用 Advaned Security 选项,则唯一可以使用得外部身份验证方形式是操作系统身份验证。如前所述,这是 SYSDBA SYSOPER 账户的要求,但也可以用于普通用户。此技术使用与操作系统用户账户同样的名称创建 Oracle 用户账户,但在前面加料OS_AUTHENT_PREFIX 实例参数指定的字符串。此参数默认为 OPS$ 字符串。可以用下列语句查询:

SQL> show parameter os_authent_prefix

 

NAME                                 TYPE        VALUE

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

os_authent_prefix                    string      ops$

SQL> select value from v$parameter where name='os_authent_prefix'

  2  ;

 

VALUE

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

ops$

创建外部操作系统身份验证的用户很简单,假如有一个操作系统用户名为 dragon,则:

对于 LINUX 系统:

   create user ops$dragon identified externally;

对于 WINDOWS 系统,假如登陆 ID Dragon,域名是 MIS

   create user "OPS$MIS\DRAGON" identified externally;

创建好用户后,以 dragon 身份登录到操作系统,然后在直接输入:sqlplus / 进行登录并连接到数据库。  

5.      全局身份验证

一个用于管理身份的新兴标准时使用 LDAP 服务器。Oracle Internet Directory(OID) 就是 Oracle 符合 LDAP 标准的一个产品,全局用户就是在 LDAP 目录中定义的用户。

 

--整理自网络

阅读(1990) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~