分类: Oracle
2014-05-20 20:25:17
常用方式。
在使用 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
一般供管理员使用
要为账户启用操作系统和口令身份验证(二者是相配的),必须为用户授予 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用户
一般供管理员使用
要使用操作系统身份验证,用户必须被确认为有权限访问 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文件,DNS,NIS等来解析;
参数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
(4)init.ora中的Remote_Login_Passwordfile对身份验证的影响。
SQL> show parameter remote_login
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
三个可选值:
NONE:
默认值,指示Oracle系统不使用密码文件,通过操作系统进行身份验证的特权用户拥有SYSORA和SYSOPER权限.
EXCLUSIVE:
1).表示只有一个数据库实例可以使用密码文件;
2).允许将SYSORA和SYSOPER权限赋值给SYS以外的其它用户。
SHARED:
1).表示可以有多个数据库实例可以使用密码文件;
2).不允许将SYSORA和SYSOPER权限赋值给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=TRUE。Oracle不推荐在远程客户端上使用操作系统验证,因为客户端验证时不是通过服务器上的操作系统用户来验证,而是使用客户端自己怕操作系统来进行windows验证,这样,客户端可以采用建立对应的windows机器名和用户名的方式来欺骗Oracle的操作系统验证。
例如:创建了如下Oracle用户
create "zl\zyk" identified externally;
grant connect to "zl\zyk";
如果有一台名为ZL的机器,创建了一个名为zyk的用户,并以此登录连接Oracle服务器(连接时使用\@OracleSTR),无需用户名和密码造成此问题的原因是,Oracle使用客户端操作系统进行验证,它无法区别zl是域名还是机器名。
Oracle数据库服务器上的windows身份认证很容易实施,并且使已登录的用户访问数据库很方便但是,这种验证模型并不适合远程客户端,因为安全隐患太大。
如果使用外部身份验证创建用户账户,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 / 进行登录并连接到数据库。
一个用于管理身份的新兴标准时使用 LDAP 服务器。Oracle Internet Directory(OID) 就是 Oracle 符合 LDAP 标准的一个产品,全局用户就是在 LDAP 目录中定义的用户。
--整理自网络