【密码文件】Oracle OS认证与密码文件(口令文件)认证--密码文件介绍

简介: 【密码文件】Oracle OS认证与密码文件(口令文件)认证 1.1  密码文件 1.1.1  密码文件简介 作用:主要进行SYSDBA和SYSOPER权限的身份认证。

【密码文件】Oracle OS认证与密码文件(口令文件)认证



1.1  密码文件

1.1.1  密码文件简介

作用:主要进行SYSDBASYSOPER权限的身份认证。密码文件存放着被授予SYSDBASYSOPER权限的用户的用户名和密码。它是一个加密的文件,用户不能修改这个文件,但是可以使用strings命令看到密码的HASH值。

Linux系统中,密码文件一般保存在$ORACLE_HOME/dbs目录下,文件名为orapw$SID;在Windows系统中,密码文件一般保存在%ORACLE_HOME%\database目录下,文件名为PWD$SID.ora

[oracle@edsir4p1-PROD1 dbs]$ strings  orapwPROD1

]\[Z

ORACLE Remote Password file

INTERNAL

AB27B53EDC5FEF41

o5&W

8A8F025737A9097A

[oracle@edsir4p1-PROD1 dbs]$

SYS@PROD1> SELECT D.PASSWORD FROM USER$ D WHERE D.NAME='SYS';

PASSWORD

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

8A8F025737A9097A

使用密码文件认证的基本步骤是:

使用orapwd工具生成密码文件

设置REMOTE_LOGIN_PASSWORDFILEEXCLUSIVE或是SHARED

使用SYS登陆数据库,创建新的数据库用户

使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限

1.1.2  密码文件的位置

Linux下的存放位置:$ORACLE_HOME/dbs/orapw$ORACLE_SID

                 即:ORACLE_HOME/dbs/orapw<sid>

Windows下的存放位置:$ORACLE_HOME/database/PWD%ORACLE_SID%.ora

 

   密码文件查找的顺序

   --->orapw<sid>--->orapw--->Failure

1.1.3  Oracle的两种认证方式

Oracle中有两类特殊的权限SYSDBASYSOPER,当DBA需要对数据库进行维护管理操作的时候必须具有这两类特殊权限之中的一种。在数据库没有打开的时候,使用数据库内建的账号是无法登陆数据库的,但是拥有SYSDBA或是SYSOPER权限的用户是可以登陆的。认证用户是否拥有两类特殊权限的方法有两种:OS认证和密码文件认证。

1.使用与操作系统集成的身份验证例如:sqlplus / as sysdbasqlplus "/ as sysdba" sqlplus sys/lhrsasa as sysdbasqlplus xx/xx as sysdbasqlplus xx/xx as sysopersqlplus / as sysoper等,只要是在本机上使用as sysdbaas sysoper身份且不含TNS的方式登录,都是首先进行OS验证,若不支持OS验证,则进行密码文件验证登录。需要注意的是,命令“sqlplus / as sysdba”永远是以OS验证方式进行登录的。

2.使用Oracle数据库的密码文件进行身份认证例如:sqlplus lhr/lhr@orcl只要是使用TNS的方式以sysdbasysoper身份登录数据库,都是密码文件验证方式另外,只要是输入了密码,则都有可能是使用密码文件方式进行登录认证,例如:sqlplus sys/lhrsasa as sysdba


Oracle数据库究竟使用OS认证还是密码文件认证来进行管理取决于下面三个因素:

① $ORACLE_HOME/network/admin/sqlnet.ora参数文件中的参数SQLNET.AUTHENTICATION_SERVICES设置

② PFILESPFILE参数文件中的参数REMOTE_LOGIN_PASSWORDFILE设置

③ 密码文件$ORACLE_HOME/dbs/orapw$ORACLE_SIDLinux | %ORACLE_HOME%\database\PWD%ORACLE_SID%.oraWindows

Oracle权限认证的基本顺序是这样的,先由SQLNET.AUTHENTICATION_SERVICES的设置值来决定是使用OS认证还是密码文件认证,如果使用密码文件认证的话就要看后面两个条件了:如果REMOTE_LOGIN_PASSWORDFILE参数设置为非NONE而且密码文件存在的话就能正常使用密码文件认证,否则将会失败。

两种认证方式类似于SQL server中的windows认证和SQL server认证

1.1.3.1  SQLNET.AUTHENTICATION_SERVICES参数

SQLNET.ORA(位于$ORACLE_HOME/NETWORK/ADMIN目录中)文件中,需要修改时直接用文本编辑器打开修改就行了,对于不同的操作系统SQLNET.AUTHENTICATION_SERVICES的取值会有些不一样,通常我们会用到下面的一些设置值:

(1) SQLNET.AUTHENTICATION_SERVICES = (ALL)

Linux系统,支持OS认证和密码文件认证。

Windows系统,实际实验是不支持此参数,验证失败。报错:ORA-12641: 验证服务无法初始化Authentication service failed to initialize

(2) SQLNET.AUTHENTICATION_SERVICES = (NTS)

此设置值仅用于Windows NT系统,此设置同时支持OS认证和密码文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。Linux系统上设置了此参数,则指定Oracle只使用密码文件认证。

(3) SQLNET.AUTHENTICATION_SERVICES = (NONE)

此设置值在WindowsLinux是作用一样的,指定Oracle只使用密码文件认证。

(4) 不设置此参数sqlnet.ora文件不存在SQLNET.AUTHENTICATION_SERVICES =

Linux系统,默认支持OS认证和密码文件认证。

Windows系统,默认只支持密码文件认证,不支持OS认证。

一、  SQLNET.AUTHENTICATION_SERVICES参数 实验

Oracle的两种认证方式

 一、官方文档说明

作用

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

 

一般可选值

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)

为了加深对这几个参数的理解,通过实验证明,这几个参数在不同的系统中的作用

二、win系统

Microsoft Windows [版本 6.1.7601]

版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

 

C:\Windows\system32>e:

 

E:\>cd E:\oracle\11_2_0\NETWORK\ADMIN

 

#sqlnet.ora文件不存在情况

E:\oracle\11_2_0\NETWORK\ADMIN>dir sqlnet.ora

 驱动器 E 中的卷没有标签。

 卷的序列号是 38D0-2A35

 

 E:\oracle\11_2_0\NETWORK\ADMIN 的目录

 

找不到文件

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:13:57 2011

 

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

 

ERROR:

ORA-01031: 权限不足

 

 

请输入用户名:

 

#NTS情况

E:\oracle\11_2_0\NETWORK\ADMIN>more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(NTS)

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:16:20 2011

 

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

 

 

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing options

 

#NONE情况

E:\oracle\11_2_0\NETWORK\ADMIN>more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(NONE)

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:17:18 2011

 

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

 

ERROR:

ORA-01031: 权限不足

 

 

请输入用户名:

 

#ALL情况

E:\oracle\11_2_0\NETWORK\ADMIN>more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(ALL)

 

E:\oracle\11_2_0\NETWORK\ADMIN>sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 1111 22:18:02 2011

 

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

 

ERROR:

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

 

 

请输入用户名:

三、linux系统

[oracle@report ~]$cd/opt/oracle/product/10.2.0/db_1/network/admin/

#NTS情况

[oracle@report admin]$more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES = (NTS)

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:03:51 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

ERROR:

ORA-01031: insufficient privileges

 

 

Enter user-name:

 

#NONE情况

[oracle@report admin]$more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES = (NONE)

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:04:31 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

ERROR:

ORA-01031: insufficient privileges

 

 

Enter user-name:

 

#ALL情况

[oracle@report admin]$more sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES = (ALL)

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:05:07 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

#不存在sqlnet.ora文件情况

[oracle@report admin]$ ll sqlnet.ora

ls: sqlnet.ora: No suchfileor directory

[oracle@report admin]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 11 22:05:41 2011

 

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

四、补充说明

1、在win系统中使用all,提示ORA-12641,不是很清楚原因

2、在nts只有在win系统中有用,linux中无用

3、当不存在sqlnet.ora文件时,linux中可以正常登录,win中不能

1.1.3.2  OS认证实现

Oracle使用操作系统中的两个用户组来控制OS认证,在不同的操作系统中这两个用户组的名称是不一样的,一般来说他们是OSDBA OSOPER,这两个用户组都是在Oracle安装的时候创建的。下面列出不同系统中这两个用户组的名字:

Operating System Group

UNIX User Group

UNIX User Group

OSDBA

dba

ORA_DBA

OSOPER

oper

ORA_OPER

OSDBA用户组的用户可以使用SYSDBA权限登陆数据库,OSOPER用户组的的用户可以使用SYSOPER权限来登陆数据库。使用sqlplus可以用下面方法登陆 

CONNECT / AS SYSDBA 

CONNECT / AS SYSOPER 

拥有OS权限的用户登陆数据库时不再需要输入用户名和密码,因此使用下面的命令也是可以正常登陆的: 

CONNECT ANY_USER_NAME / ANY_PASSWORD AS SYSDBA 

CONNECT ANY_USER_NAME / ANY_PASSWORD AS SYSOPER 

因此要创建一个新的OS认证帐号步骤是: 

1. 建立一个OS用户

2. 将用户加入到OSDBA或是OSOPER用户组

3. 用新增加的用户登陆系统,然后输入sqlplus / AS SYSDBA进行登陆

一、  REMOTE_LOGIN_PASSWORDFILE参数

REMOTE_LOGIN_PASSWORDFILE参数的设置制定了数据库使用密码文件的方法,此参数可以设置的值有三个:

REMOTE_LOGIN_PASSWORDFILE = NONE #不使用密码文件

REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE  #使用密码文件,但只有一个数据库实例可以使用

REMOTE_LOGIN_PASSWORDFILE = SHARED #多个数据库实例共用一个密码文件,这种设置下是不能增加其他数据库用户作为特殊权限用户到密码文件中的。

REMOTE_LOGIN_PASSWORDFILE参数属于初始化参数,只能在init.ora/pfile中指定或是在数据库打开状态下使用下面语句修改,然后重新启动数据库。

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE SCOPE = SPFILE ;

要检查当前REMOTE_LOGIN_PASSWORDFILE的设定值在登陆Oracle后输入下面的命令

SYS@PROD1> show parameter remote_login_passwordfile

 

NAME                                 TYPE        VALUE

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

remote_login_passwordfile            string      EXCLUSIVE

二、设置初始化参数REMOTE_LOGIN_PASSWORDFILE

Oracle数据库实例的初始化参数文件中,此参数控制着密码文件的使用及其状态。它可以有以下几个选项:

NONE:指示Oracle系统不使用密码文件,特权用户的登录通过操作系统进行身份验证;

EXCLUSIVE:指示只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除INTERNALSYS以外的用户信息,即答应将系统权限SYSOPERSYSDBA授予除INTERNALSYS以外的其他用户。

SHARED:指示可有多个数据库实例可以使用此密码文件。在此设置下只有INTERNALSYS帐号能被密码文件识别,即使文件中存有其他用户的信息,也不答应他们以SYSOPERSYSDBA的权限登录。此设置为缺省值。

REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVESHARED情况下,Oracle系统搜索密码文件的次序为:在系统注册库中查找ORA_SID_PWFILE参数值(它为密码文件的全路径名);若未找到,则查找ORA_PWFILE参数值;若仍未找到,则使用缺省值ORACLE_HOMEDATABASEPWDSID.ORA;其中的SID代表相应的Oracle数据库系统标识符。

1.1.3.3  验证方式演示

   1.sqlnet.ora中追加SQLNET.AUTHENTICATION_SERVICES = none */

   [oracle@robinson ~]$ sqlplus / as sysdba /*登陆失败*/

 

   SQL*Plus: Release 10.2.0.1.0- Production on Fri Apr 9 10:41:28 2010

 

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

 

   ERROR:

   ORA-01031: insufficient privileges

   Enter user-name:

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

   [oracle@robinson ~]$ sqlplus sys/redhat as sysdba /*使用密码文件认证,登陆成功*/

 

   SQL*Plus: Release 10.2.0.1.0- Production on Fri Apr 9 10:42:35 2010

 

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

 

 

   Connected to:

   Oracle Database 10g Enterprise Edition Release 10.2.0.1.0- Production

   With the Partitioning, OLAPand Data Mining options

 

   SQL> 

   --=================================================================================

   

   2.SQLNET.AUTHENTICATION_SERVICES的值改为all

 

   [oracle@robinson admin]$ sqlplus / as sysdba /*采用本机认证可以登陆*/

 

   SQL*Plus: Release 10.2.0.1.0- Production on Fri Apr 9 10:46:55 2010

 

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

 

 

   Connected to:

   Oracle Database 10g Enterprise Edition Release 10.2.0.1.0- Production

   With the Partitioning, OLAPand Data Mining options

 

   SQL> 

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

   [oracle@robinson admin]$ sqlplus sys/redhat@orcl as sysdba /*使用密码文件登陆认证失败*/

 

   SQL*Plus: Release 10.2.0.1.0- Production on Fri Apr 9 10:48:35 2010

 

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

 

   ERROR:

   ORA-12641: Authenticationservice failed to initialize

 

   Enter user-name:

 

   --注:此时可以使用远程登陆。 

 

   --使用#符号将新增的SQLNET.AUTHENTICATION_SERVICES行注释掉恢复到缺省值

 

1.1.4  密码文件的建立

[oracle@edsir4p1-PROD1 dbs]$ orapwd

Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

 

  where

    file - name of password file (required),

    password - password for SYS will be prompted if not specified at command line,

    entries - maximum number of distinct DBA (optional),

    force - whether to overwrite existing file (optional),

    ignorecase - passwords are case-insensitive (optional),

    nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).

    

  There must be no spaces around the equal-to (=) character.

   [oracle@robinson ~]$ orapwd

   Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>

 

     where

      file - name of password file (mand), /*密码文件的名字orapw<sid>*/

      password - password for SYS (mand),  /*sys用户的密码*/

      entries - maximum number of distinct DBA and /*可以有多少个sysdba,sysoper权限用户放到密码文件中去,去掉重复记录注意entries中存放的个数但不是实际个数,这个是二进制数据*/  

      force - whether to overwrite existingfile (opt),/*10g新增的参数,默认值为n ,y表示允许覆盖*/

   OPERs (opt),

     There are no spaces around the equal-to(=) character.

注意:使用orapwd重新生成密码文件之后以前保存的授予的其他用户的SYSDBA或是SYSOPER权限将会丢失,需要重新的GRANT

设定的entries值是不能修改的,如果要修改entries的话需要重新生成密码文件,在生成密码文件之前可以先通过V$PWFILE_USERS视图查询出当前被授予SYSDBA/SYSOPER权限的用户,然后在重新生成密码文件以后重新对这些用户授予SYSDBA/SYSOPER权限

   --修改密码:

   [oracle@robinson ~]$ cd $ORACLE_HOME/dbs

   [oracle@robinson dbs]$ ll orapworcl

   -rw-r----- 1 oracle oinstall 1536 Apr 7 15:50 orapworcl

   [oracle@robinson dbs]$ orapwd file=orapworcl password=oracle force=y

   [oracle@robinson dbs]$ sqlplus sys/oracle@orclas sysdba

 

   SQL*Plus: Release 10.2.0.1.0- Production on Fri Apr 9 11:34:09 2010

 

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

 

 

   Connected to:

   Oracle Database 10g Enterprise Edition Release 10.2.0.1.0- Production

   With the Partitioning, OLAPand Data Mining options

 

   SQL>   

   --将密码改回原来的密码

   [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat

 

   OPW-00005:File with same name exists - pleasedelete or rename

   [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat force=y

   [oracle@robinson dbs]$ rm orapworcl  /*删除密码文件*/

   [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat/*重建密码文件*/

 

   --演示将entries改为,然后将多个用户设置为sysdbasysoper

   [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat entries=1

   [oracle@robinson dbs]$ strings orapworcl

   ]/[Z

   ORACLE Remote Password file

   INTERNAL

   F7AC0C5E9C3C37AB

   E100B964899CDDDF

 

   --创建PL/SQL增加个新用户

   SQL> begin

     2  for iin 1..20 loop

     3  execute immediate'create user u'||i||' identified by u'||i||'';

     4  end loop;

     5  end;

     6  /

   --将新用户赋予sysdba角色

   PL/SQL procedure successfully completed.

 

   SQL> begin

     2  for iin 1..20 loop

     3  execute immediate'grant sysdba to u'||i||'';

     4  end loop;

     5  end;

     6  /

   begin  /*得到和密码文件相关的错误提示*/

   *

   ERROR at line 1:

   ORA-01996:GRANT failed: passwordfile '' is full

   ORA-06512: at line 3

 

   --再次查看orapworcl发现多出了行,即当设置为的时候多出了个用户。原因是该密码文件是二进制文件,按矩阵计算可存放多少

   [oracle@robinson dbs]$ strings orapworcl

   ]/[Z

   ORACLE Remote Password file

   INTERNAL

   F7AC0C5E9C3C37AB

   E100B964899CDDDF

   3E81B724A296E296

   668509DF9DD36B43

   9CE6AF1E3F609FFC

   7E19965085C9ED47

 

 

   --注意不要轻易删掉密码文件,这样会将其他账户的信息也删除

创建Oracle密码文件的命令

orapwd  file=<>  password=<> entries=最大数目

这里的file命名规则在unix/linuxorapw<ORACLE_SID>,在windows下为 pwd<SID>.ora

具体资料看下面的描述

1. unix 环境:

Administrator's Reference 10g Release 2 10.2for UNIX-Based Operating Systems.

1. Log in as the Oracle software owner. (以Oracle管理员身份登入)

2. Use the orapwd utility to create the password file as follows(使用orapwd功能创建密码文件):

$ $ORACLE_HOME/bin/orapwd file=filename password=password entries=max_users

filename The name of the file in which password information is writtenfilename指密码信息保存文件的文件名)

The name of the file must be orapwsidand you must supply the full path name. Its contents are encrypted. Typicallythe password file is created in the $ORACLE_HOME/dbs directory.(文件名必须为orapwsid,并需要提供完整路径,内容是加密的,通常情况下,密码文件被创建在$ORACLE_HOME/dbs路径下。)

请注意,unix环境中,password file一定是要用 orapw<SID>,没有例外。

2. windows 环境:

Platform. Guide 10g Release 2 10.2for Microsoft Windows 32-Bit

To create and populate a password file

1. Create a password file with the Password Utility

C> orapwd FILE=pwdsid.ora PASSWORD=password ENTRIES=max_users

where

| FILE specifies the password filename.

| SID identifies the database instance.

| PASSWORD sets the password for account SYS.

| ENTRIES sets maximum number of entries in password file. This corresponds to maximum number of distinct users allowed to connect to the database simultaneously with either the SYSDBA or the SYSOPER DBA privilege.

2. Set initialization parameter file parameter REMOTE_LOGIN_PASSWORDFILE to exclusivesharedor none.

In search of the password fileOracle Database looks in the registry for the value of parameter

ORA_SID_PWFILE. If no value is specifiedthen it looks in the registry for the

value of parameter ORA_PWFILEwhich points to a file containing usernames

passwordsand privileges. If that is not setthen it uses the default

ORACLE_BASEORACLE_HOMEDATABASEPWDsid.ORA.

The default value is shared.

请注意,windows环境中,很大的部分是基于registry中变量ora_sid_pwfile 或者 ora_pwfile的设置, 缺省的值是 pwd<SID>.ora unix中是没有这个.ora后缀的)。

windows下对于connect /as sysdba及其它用户可以不用密码就能登录的问题

1.这是因为oracle采用了OS认证的方式,具体的可以查看 sqlnet.ora具体同容如下

SQLNET.AUTHENTICATION_SERVICES=NTS

将其改成SQLNET.AUTHENTICATION_SERVICES=NONE

这样就是oracle认证方式了

2.因为用的OS认证方式,可以在操作系统->控制面版->计算机管理->用户将当前用户的属性组 ORA_DBA去掉,这时如果没有用户名及密码则不可以。

如下:

SQL> connect /as sysdba ERRORORA-01031insufficient privileges

SQL> connect sys/oracle as sysdba

已连接。

利用alter user identified by来修改密码alter user sys identified by abc一下,就连数据库中的密码和密码文件中的密码一起改成abc了;

如果Oracle密码文件丢失了如何办?

利用 orapwd重新创建一个就可以

Oracle数据库系统中,用户假如要以特权用户身份(INTERNALSYSDBASYSOPER)登录Oracle数据库可以有两种身份验证的方法:即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证。因此,治理好密码文件,对于控制授权用户从远端或本机登录Oracle数据库系统,执行数据库治理工作,具有重要的意义。

Oracle数据库的密码文件存放有超级用户INTERNALSYS密码及其他特权用户的用户名/密码,它一般存放在ORACLE_HOMEDATABASE目录下。

一、密码文件的创建:

在使用Oracle Instance Manager创建一数据库实例的时侯,在ORACLE_HOMEDATABASE目录下还自动创建了一个与之对应的密码文件,文件名为PWDSID.ORA,其中SID代表相应的Oracle数据库系统标识符。此密码文件是进行初始数据库治理工作的基础。在此之后,治理员也可以根据需要,使用工具ORAPWD.EXE手工创建密码文件,命令格式如下:

C:>ORAPWD FILE=FILENAME > PASSWord

=PASSWORD ENTRIES=< MAX_USERS >

各命令参数的含义为:

FILENAME:密码文件名;

PASSWORD:设置INTERNALSYS帐号的密码

MAX_USERS:密码文件中可以存放的最大用户数,对应于答应以SYSDBASYSOPER权限登录数据库的最大用户数。由于在以后的维护中,若用户数超出了此限制,则需要重建密码文件,所以此参数可以根据需要设置得大一些。

有了密码文件之后,需要设置初始化参数REMOTE_LOGIN_PASSWORDFILE来控制密码文件的使用状态。

1.1.5  导致密码文件内容修改的几种方式

   1.使用orapwd建立,修改密码文件,不建议使用

   2.使用alter user sys identified by <>

   3.使用grant sysdba to <>grant sysoper to <>revoke sysdba |sysoper from <>

每次在Oracle系统里面使用GRANT SYSDBA/SYSOPER授予新用户特殊权限或是ALTER USER命令修改拥有SYSDBA/SYSOPER权限的用户密码的时候,Oracle都会自动的修改密码文件,增加或是修改相应的项目,这样保证在数据没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。

在使用ALTER USER 修改SYS密码时,会同时修改密码文件中的密码,保持一致;如果是手工创建的密码文件,密码文件中的密码可以与SYS密码相同也可以不同,都不影响密码文件验证登录。不过还是建议数据库中SYS密码与密码文件中的密码一致,以免需要急用远程登录时密码反而不对,造成维护上的问题。

查询MOS上也有相关的文档:Password or SYS Doesn't Match the Hash Value in USER$ (文档 ID 2139304.1)

[oracle@edsir4p1-PROD1 dbs]$ strings  orapwPROD1

]\[Z

ORACLE Remote Password file

INTERNAL

AB27B53EDC5FEF41

o5&W

8A8F025737A9097A

[oracle@edsir4p1-PROD1 dbs]$

SYS@PROD1> SELECT D.PASSWORD FROM USER$ D WHERE D.NAME='SYS';

PASSWORD

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

8A8F025737A9097A

SYS@PROD1> ! ls -l /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1

-rw-r----- 1 oracle oinstall 1536 Nov 29 05:36 /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1

SYS@PROD1> alter user sys identified by lhr;

User altered.

SYS@PROD1> SELECT D.PASSWORD FROM USER$ D WHERE D.NAME='SYS';

PASSWORD

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

B1BDB30F0899B88F

SYS@PROD1> ! ls -l /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1

-rw-r----- 1 oracle oinstall 1536 Nov 29 05:54 /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1

SYS@PROD1> ! strings /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1

]\[Z

ORACLE Remote Password file

INTERNAL

0575A0C032EB97DC

B1BDB30F0899B88F

SYS@PROD1> ! orapwd file=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1 password=oracle force=y

SYS@PROD1>  ! strings /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1

]\[Z

ORACLE Remote Password file

INTERNAL

AB27B53EDC5FEF41

#O!c3

I~&)

8A8F025737A9097A

SYS@PROD1> SELECT D.PASSWORD FROM USER$ D WHERE D.NAME='SYS';

PASSWORD

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

B1BDB30F0899B88F

可以看到,重建密码文件后,数据库中存储的密码没有改变。

1.1.6  查看密码文件内容

   [oracle@robinson dbs]$ strings orapworcl

   ]/[Z

   ORACLE Remote Password file

   INTERNAL

   F7AC0C5E9C3C37AB

   E100B964899CDDDF

 

   --sys密码不记得可以使用OS系统身份认证登陆到sqlplus,再使用alter user修改密码

   SQL> alteruser sys identified by oracle;

 

   User altered

   --再次查看密码文件与上一次对比,已经发生变化

   SQL> ho strings orapworcl

   ]/[Z

   ORACLE Remote Password file

   INTERNAL

   AB27B53EDC5FEF41

   8A8F025737A9097A

 

 

   --通过授予权限来修改密码,密码文件中多出了scott的信息

   SQL> grant sysdbato scott;

 

   Grant succeeded.

 

   SQL> ho strings orapworcl

   ]/[Z

   ORACLE Remote Password file

   INTERNAL

   AB27B53EDC5FEF41

   8A8F025737A9097A

   SCOTT

   F894844C34402B67

 

 

   --注意此处中登陆后,显示的账户信息还是sys,而不是scott,但此时的scott已经具备了sys权限

   [oracle@robinson dbs]$ sqlplus scott/tiger@orclas sysdba

 

   SQL*Plus: Release 10.2.0.1.0- Production on Fri Apr 9 11:56:09 2010

 

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

 

 

   Connected to:

   Oracle Database 10g Enterprise Edition Release 10.2.0.1.0- Production

   With the Partitioning, OLAPand Data Mining options

 

   SQL> show user

   USER is "SYS"

 

   

1.1.7  sysdbasysoper的区别

& 说明:

有关DBASYSDBASYSOPER三者的区别的更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-2147919/

   SQL> select* from system_privilege_map where name like '%SYS%';

 

    PRIVILEGE NAME                                      PROPERTY

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

          -3 ALTER SYSTEM                                     0

          -4 AUDIT SYSTEM                                     0

         -83 SYSDBA                                           0

         -84 SYSOPER                                          0

         

   --下面的链接是两者不同的权限说明    

   http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/dba.htm#sthref137

   The manner in which you are authorized to use these privileges depends upon the methodof authentication that you use.

 

   When you connect with SYSDBA or SYSOPER privileges, you connectwith a default schema, not with the schema that is generally associatedwith your username.

   For SYSDBA this schemais SYS; for SYSOPER the schema is PUBLIC.

   --两者的schema不同

   SQL> show user

   USER is "SYS"

   SQL> conn /as sysoper

   Connected.

   SQL> show user

   USER is "PUBLIC"

 

   --查看密码文件视图,可以得到哪些用户为sysdba,哪些用户为sysoper

   SQL> select* from v$pwfile_users;

 

   USERNAME                       SYSDB SYSOP

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

   SYS                            TRUE  TRUE

   SCOTT                          TRUE  FALSE

   USER1                          FALSE TRUE

   --下面演示了使用不同的角色来登陆

   SQL> conn scott/tiger@orclas sysdba

   Connected.

   SQL> conn scott/tiger@orclas sysoper  /*scottsysop列为false*/

   ERROR:

   ORA-01031: insufficient privileges

 

 

   Warning: You are no longer connected to ORACLE.

   SQL> conn user1/user1@orclas sysdba

   ERROR:

   ORA-01031: insufficient privileges

 

 

   SQL> conn user1/user1as sysoper

   Connected.

1.1.8  其它

常见问题说明

1、如何查找拥有SYSDBA或是SYSOPER权限的用户

使用视图V$PWFILE_USERS,结果集中的SYSDBSYSOP分别代表是否有SYSDBASYSOPER权限。

SQL > select * from v $ pwfile_users ;

/**

USERNAME                       SYSDB SYSOP

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

SYS                            TRUE  TRUE

TEST                           TRUE  FALSE

*/

2、授予权限时出现”ORA-01994: GRANT failed: password file missing or disabled

出现这种情况是因为没有创建密码文件,或者是密码文件放置的目录不正确,Oracle找不到。只要重建或将密码文件置于$ORACLE_HOME/dbs/目录中就可以了。

3、忘记了SYS帐号的密码怎么办?

如果数据库启用的OS认证登陆,则可以用OS认证登陆数据库,然后使用下面的命令进行修改

alter user SYS identified by pwd ;

如果没有启用OS认证登陆,则需要用orapwd重建密码文件

orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

其中的password项所指定的就是SYS的密码


1.1.9  OPW-00001: 无法打开密码文件

C:\Documents and Settings\testuser>orapwd file='D:\oracle\ora92\DATABASE\PW

Dtestdb.ORA' password='testdb'

OPW-00001: 无法打开密码文件

去掉单引号,或者修改单引号为双引号:

orapwd file="E:\oracle\ora8i\DATABASE\PWDortest.ORA" password=lhr






本文概述与实验环境

概述:本文只讨论OS认证和口令文件认证方式的配置方法,如何配置以及使用OS认证和口令文件认证方式验证SYSDBA/SYSOPER权限。

实验环境:Oracle 10.1 + Windows 2003 和 Oracle 10.2 + RHEL 4

特殊权限与Oracle登陆认证管理

在开始学Oracle的时候有件事一直让我感觉很奇怪,就是为什么在数据没有起来的时候只要登录到安装Oracle的操作系统中直接用sqlplus / as sysdba就能登陆到数据库中然后对数据库进行启动停止之类的操作。后来看到关于Oracle口令文件相关资料的时候才豁然开朗:数据库认证信息并不一定存在数据库中的,这点和SQL Server很是不一样。

在Oracle中有两类特殊的权限SYSDBA和SYSOPER,当DBA需要对数据库进行维护管理操作的时候必须具有这两类特殊权限之中的一种。在数据库没有打开的时候,使用数据库内建的账号是无法登陆数据库的,但是拥有SYSDBA或是SYSOPER权限的用户是可以登陆的。认证用户是否拥有两类特殊权限的方法有两种:OS认证和口令文件认证。

OS认证和口令文件认证方法

Oracle特殊权限认证方法
(来源:Oracle? Database Administrator’s Guide 10g Release 2)

Oracle数据库究竟使用OS认证还是口令文件认证来进行管理取决于下面三个因素:

  • SQLNET.ORA参数文件中的参数SQLNET.AUTHENTICATION_SERVICES设置
  • PFILE(SPFILE)参数文件中的参数REMOTE_LOGIN_PASSWORDFILE设置
  • 口令文件orapw$SID(Linux) | PWD$SID.ora(Windows)

Oracle权限认证的基本顺序是这样的,先由SQLNET.AUTHENTICATION_SERVICES的设置值来决定是使用OS认证还是口令文件认证,如果使用口令文件认证的话就要看后面两个条件了:如果REMOTE_LOGIN_PASSWORDFILE参数设置为非NONE而且口令文件存在的话就能正常使用口令文件认证,否则将会失败。

SQLNET.AUTHENTICATION_SERVICES参数

在SQLNET.ORA(位于$ORACLE_HOME/NETWORK/ADMIN目录中)文件中,需要修改时直接用文本编辑器打开修改就行了,对于不同的操作系统SQLNET.AUTHENTICATION_SERVICES的取值会有些不一样,通常我们会用到下面的一些设置值:

  • SQLNET.AUTHENTICATION_SERVICES = (ALL)

对Linux系统,支持OS认证和口令文件认证。

对Windows系统,实际实验是不支持此参数,验证失败。

  • SQLNET.AUTHENTICATION_SERVICES = (NTS)

此设置值仅用于Windows NT系统,此设置同时支持OS认证和口令文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。

  • SQLNET.AUTHENTICATION_SERVICES = (NONE)

此设置值在Windows和Linux是作用一样的,指定Oracle只使用口令文件认证。

  • 不设置此参数或SQLNET.AUTHENTICATION_SERVICES =

对Linux系统,默认支持OS认证和口令文件认证。

对Windows系统,默认只支持口令文件认证,不支持OS认证。

OS认证实现

Oracle使用操作系统中的两个用户组来控制OS认证,在不同的操作系统中这两个用户组的名称是不一样的,一般来说他们是OSDBA 和 OSOPER,这两个用户组都是在Oracle安装的时候创建的。下面列出不同系统中这两个用户组的名字:






Operating System Group
UNIX User Group
UNIX User Group
OSDBA
dba
ORA_DBA
OSOPER
oper
ORA_OPER

OSDBA用户组的用户可以使用SYSDBA权限登陆数据库,OSOPER用户组的的用户可以使用SYSOPER权限来登陆数据库。使用sqlplus可以用下面方法登陆

CONNECT / AS SYSDBA
CONNECT / AS SYSOPER

拥有OS权限的用户登陆数据库时不再需要输入用户名和密码,因此使用下面的命令也是可以正常登陆的:

CONNECT ANY_USER_NAME / ANY_PASSWORD AS SYSDBA
CONNECT ANY_USER_NAME / ANY_PASSWORD AS SYSOPER

因此要创建一个新的OS认证帐号步骤是:

  1. 建立一个OS用户
  2. 将用户加入到OSDBA或是OSOPER用户组
  3. 用新增加的用户登陆系统,然后输入sqlplus / AS SYSDBA进行登陆

REMOTE_LOGIN_PASSWORDFILE参数

REMOTE_LOGIN_PASSWORDFILE系统参数的设置制定了数据库使用口令文件的方法,此参数可以设置的值有三个:

  • REMOTE_LOGIN_PASSWORDFILE = NONE

不使用口令文件

  • REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE

使用口令文件,但只有一个数据库实例可用使用

  • REMOTE_LOGIN_PASSWORDFILE = SHARED

多个数据库实例共用一个口令文件,这种设置下是不能增加其他数据库用户作为特殊权限用户到口令文件中的。

REMOTE_LOGIN_PASSWORDFILE参数属于初始化参数,只能在init.ora/pfile中指定或是在数据库打开状态下使用下面语句修改,然后重新启动数据库。

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE SCOPE = SPFILE ;

要检查当前REMOTE_LOGIN_PASSWORDFILE的设定值在登陆Oracle后输入下面的命令

SQL > show parameter remote
/** 这是输出结果,看remote_login_passwordfile一行
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_archive_enable                string      true
remote_dependencies_mode             string      TIMESTAMP
remote_listener                      string
remote_login_passwordfile            string      EXCLUSIVE
remote_os_authent                    boolean     FALSE
remote_os_roles                      boolean     FALSE
SQL>
*/

口令文件和口令文件认证

口令文件存放着被授予SYSDBA或SYSOPER权限的用户的用户名和密码。它是一个加密的文件,用户不能修改这个文件,
在Linux系统中口令文件一般保存在$ORACLE_HOME/dbs目录下,文件名为orapw$SID;在Windows系统中口令文件一般保存在$ORACLE_HOME/database目录下,文件名为PWD$SID.ora。

使用口令文件认证的基本步骤是:

  1. 使用orapwd工具生成口令文件
  2. 设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或是SHARED
  3. 使用SYS登陆数据库,创建新的数据库用户
  4. 使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限

1、使用orapwd工具生成口令文件

我们可以使用Oracle提供的工具orapwd来创建或者重新初始化一个口令文件:

[oracle@RHEL4 dbs]$ orapwd
Usage: orapwd file= password= entries= force=

  where
    file - name of password file (mand),
    password - password for SYS (mand),
    entries - maximum number of distinct DBA and     force - whether to overwrite existing file (opt),
OPERs (opt),
  There are no spaces around the equal-to (=) character.
[oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y
[oracle@RHEL4 ~]$

注意:使用orapwd重新生成口令文件之后以保存的授予的其他用户的SYSDBA或是SYSOPER权限将会丢失,需要重新的GRANT。

设定的entries值是不能修改的,如果要修改entries的话需要重新生成口令文件,在生成口令文件之前可以先通过V$PWFILE_USERS视图查询出当前被授予SYSDBA/SYSOPER权限的用户,然后在重新生成口令文件以后重新对这些用户授予SYSDBA/SYSOPER权限

2、设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或是SHARED

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE SCOPE = SPFILE ;

3、使用SYS登陆数据库,创建新的数据库用户

CREATE USER test IDENTIFIED BY test ;

4、使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限

GRANT SYSDBA TO test .

每次在Oracle系统里面使用GRANT SYSDBA/SYSOPER授予新用户特殊权限或是ALTER USER命令修改拥有SYSDBA/SYSOPER权限的用户密码的时候,Oracle都会自动的修改口令文件,增加或是修改相应的项目,这样保证在数据没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。

实验

上面长篇大论的说了那么多,下面我们来做实验验证一下。实验都是基于Linux系统来做的,做实验之前先使用下面的命令创建一个口令文件:

[oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

1、验证OS认证

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (ALL)或是不设置,REMOTE_LOGIN_PASSWORDFILE = NONE,然后进行下面的操作。

本地使用下面两种方式登陆,都能成功

[oracle@RHEL4 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:06:55 2008

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


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>
[oracle@RHEL4 dbs]$ sqlplus aaa/bbb as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:16:25 2008

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


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

远程使用口令文件方式登陆,失败

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

Enter user-name:

2、两种认证都失效

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NONE),REMOTE_LOGIN_PASSWORDFILE = NONE,然后进行下面的操作。

本地使用下面两种方式登陆,都失败

[oracle@RHEL4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:05 2008

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

ERROR:
ORA-01031: insufficient privileges

Enter user-name:
[oracle@RHEL4 ~]$ sqlplus sys/pwd as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:46 2008

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

ERROR:
ORA-01017: invalid username/password; logon denied

Enter user-name:

远程使用口令文件方式登陆,失败

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

Enter user-name:

3、验证口令文件认证

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NONE)不设置,REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE或SHARED,然后进行下面的操作。

本地使用验证OS认证,失败

[oracle@RHEL4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:16:56 2008

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

ERROR:
ORA-01031: insufficient privileges

Enter user-name:

本地验证口令文件认证,成功

[oracle@RHEL4 ~]$ sqlplus sys/pwd as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:26:48 2008

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

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

远程使用口令文件认证,成功

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:21:18 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SYS@192.168.0.201/orcl>

4、两种认证都成功

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (ALL),REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE,然后进行下面的操作。

本地使用验证OS认证,成功

[oracle@RHEL4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:30:33 2008

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

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

远程使用口令文件认证,成功

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:27:11 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SYS@192.168.0.201/orcl>

5、将SYSDBA/SYSOPER权限授权给其它数据库帐户

先查看口令文件的修改时间

[oracle@RHEL4 dbs]$ ll orapworcl
-rw-r-----  1 oracle oinstall  2560 Jun  7 19:04 orapworcl

用SYS登陆数据库,创建新用户test,并赋予SYSDBA权限

[oracle@RHEL4 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 21:41:36 2008

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

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>
SQL > create user test identified by test ;
User created
.
SQL > grant sysdba to test
;
Grant succeeded .
SQL>exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

再看口令文件,已经修改了

[oracle@RHEL4 dbs]$ ll orapworcl
-rw-r-----  1 oracle oinstall  2560 Jun  7 21:42 orapworcl

再用新的test帐号登陆,能成功的登陆

D:\Oracle\SQLPlus10.2>sqlplus test/test@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 21:32:37 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SYS@192.168.0.201/orcl>

说明:如果要取消SYSDBA权限只需要运行下面的语句就可以了

SQL > revoke sysdba from test ;

常见问题说明

1、如何查找拥有SYSDBA或是SYSOPER权限的用户

使用视图V$PWFILE_USERS,结果集中的SYSDB和SYSOP分别代表是否有SYSDBA和SYSOPER权限。

SQL > select * from v $ pwfile_users ;
/**
USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
SYS                            TRUE  TRUE
TEST                           TRUE  FALSE
*/

2、授予权限时出现”ORA-01994: GRANT failed: password file missing or disabled”

出现这种情况是因为没有创建口令文件,或者是口令文件放置的目录不正确,Oracle找不到。只要重建或将口令文件置于$ORACLE_HOME/dbs/目录中就可以了。

3、忘记了SYS帐号的密码怎么办?

如果数据库启用的OS认证登陆,则可以用OS认证登陆数据库,然后使用下面的命令进行修改

alter user SYS identified by pwd ;

如果没有启用OS认证登陆,则需要用orapwd重建口令文件

orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

其中的password项所指定的就是SYS的密码

参考文档

谢谢作者:  ITPUB   warehouse

http://www.itpub.net/viewthread.php?tid=906008&extra=&page=1

1、os认证
    oracle安装之后默认情况下是启用了os认证的,这里提到的os认证是指服务器端os认证。os认证的意思把登录数据库的用户和口令校验放在了操作系统一级。如果以安装oracle时的用户登录os,那么此时在登录oracle数据库时不需要任何验证,如:

    SQL> connect /as sysdba
    已连接。

    SQL> connect sys/aaa@dmt as sysdba
    已连接。

    SQL> connect sys/bbb as sysdba
    已连接。

    SQL> connect aaa/bbb as sysdba
    已连接。

    SQL> show user
    USER 为 "SYS"

    SQL>

    不论输入什么用户(哪怕这个用户如aaa在数据库中根本不存在),只要以sysdba权限连接数据库,都可以连接上,并且连接用户是sys,这样很方便, 有时候,如果忘记了数据库的密码,而又想登录数据库,可以通过这种方式,前提是在数据库服务器上;但是方便的同时也带来了一些安全隐患,于是很多人想屏蔽 os认证,在win下只要把oracle_home/NETWORK/admin/sqlnet.ora中的 SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注释掉这句话(在前面加上#),就可以屏蔽os功能,要想以sys用户连上数据库必须输入正确的sys口令,如:

    SQL> connect /as sysdba
    ERROR:
    ORA-01031: 权限不足

    SQL> connect sys/aaa as sysdba
    ERROR:
    ORA-01017: 用户名/口令无效; 登录被拒绝

    SQL> connect aaa/bbb as sysdba
    ERROR:
    ORA-01031: 权限不足

    SQL> connect sys/system as sysdba
    已连接。

    SQL>

    或者可以把oracle的安装用户从组ora_dba中删除掉,当然也可以直接把ora_dba这个组也删除,都可以屏蔽os功能。在 unix/linux下也可以在文件sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及删除 dba(groupdel dba)组或者把oracle用户从dba组中删除都可以屏蔽os认证。利用这两种方法屏蔽os功能似乎总有些让人不放心,或者说不能让人完全信服,因为 毕竟系统管理员还是可以创建ora_dba or dba组以及修改sqlnet.ora文件,如何彻底屏蔽os功能?让它"永世不得翻身"呢?我没有这方面的经验, 大家可以补充!

    2、口令文件
    oracle的口令文件的作用是存放所有以sysdba或者sysoper权限连接数据库的用户的口令,如果想以sysdba权限远程连接数据库,必须使 用口令文件,否则不能连上,由于sys用户在连接数据库时必须以sysdba or sysoper方式,也就是说sys用户要想连接数据库必须使用口令文件,因此我认为在数据库中存放sys用户的口令其实没有任何意义!使用口令文件的好 处是即使数据库不处于open状态,依然可以通过口令文件验证来连接数据库。开始安装完oracle,没有给普通用户授予sysdba权限,口令文件中只 存放了sys的口令,如果之后把sysdba权限授予了普通用户,那么此时会把普通用户的口令从数据库中读到口令文件中保存下来,当然这时必须要求数据库 处于open状态。如:

    SQL> grant sysdba to test;
    授权成功。

    SQL> connect test/aaa@orcl as sysdba
    ERROR:
    ORA-01017: 用户名/口令无效; 登录被拒绝
    警告: 您不再连接到 ORACLE。

    SQL> connect test/test@orcl as sysdba
    已连接。

    SQL> alter database close;
    数据库已更改。

    SQL> grant sysdba, sysoper to test;
    grant sysdba, sysoper to test
    *
    第 1 行出现错误:
    ORA-01109: 数据库未打开

    到底有几个用户被授予了sysdba或者sysoper权限,可以通过查询如下v$pwfile_users获得,v$pwfile_users的信息就 是源于口令文件的(This view lists users who have been granted SYSDBA and SYSOPER privileges as derived from the password file.)

    SQL> select * from v$pwfile_users;
    USERNAME SYSDB SYSOP
    ------------------------------ ----- -----
    SYS TRUE TRUE
    TEST TRUE FALSE

    到底可以有几个用户被授予sysdba或者sysoper权限,是由创建口令文件时指定的entries数决定的,准确的说还不完全是,最终还和os block的大小有关,如果entries指定了5,一个os block可以存放8个用户的口令,那么可以由8个用户被授予sysdba或者sysoper。

    下面看一个简单的测试:
    SQL> declare
      2     v_string varchar2(100);
      3  begin
      4  for i in 1..100 loop
      5     v_string := 'create user test'||i||' identified by test'||i;
      6     execute immediate v_string ;
      7  end loop;
      8  end;
      9  /
    PL/SQL 过程已成功完成。

    SQL> select count(*) from dba_users where username like '%TEST%';
      COUNT(*)
    ----------
           101

    这里之所以是101,是因为之前已经创建过test用户

    SQL> declare
      2     v_string varchar2(100);
      3  begin
      4          for i in 1..100 loop
      5             v_string := 'grant sysdba to test'||i;
      6                  execute immediate v_string ;
      7          end loop ;
      8  end ;
      9  /

    declare
    *
    第 1 行出现错误:
    ORA-01996: GRANT 失败: 口令文件 '' 已满
    ORA-06512: 在 line 6

    SQL> select * from v$pwfile_users;
    USERNAME                       SYSDB SYSOP
    ------------------------------ ----- -----
    SYS                            TRUE  TRUE
    TEST1                          TRUE  FALSE
    TEST2                          TRUE  FALSE
    TEST3                          TRUE  FALSE
    TEST4                          TRUE  FALSE
    TEST5                          TRUE  FALSE
    TEST6                          TRUE  FALSE
    TEST7                          TRUE  FALSE
    TEST8                          TRUE  FALSE

    已选择9行。

    SQL>

    可以清楚的看到v$pwfile_users里面并不是创建口令文件时指定的entries=5而是9条记录,意味着9个用户的口令占用了一个os block,其实也可能是多个os block,总之这些block都是满的,但是观察口令文件,还是占了2k,这是我解释不清的地方。通过os命令发现;每个簇字节数4096;这里其实就 是os block 大小实际上是4k,但是口令文件占用了2k,根本没有用满一个os block,不知道何故,也是我的疑惑 (
    This parameter specifies the number of entries that you require the password file to accept. This number corresponds to the number of distinct users allowed to connect to the database as SYSDBA or SYSOPER. The actual number of allowable entries can be higher than the number of users, because the ORAPWD utility continues to assign password entries until an operating system block is filled. For example, if your operating system block size is 512 bytes, it holds four password entries. The number of password entries allocated is always a multiple of four.
    )

    win下查看os block大小
    C:\WINDOWS\system32>fsutil fsinfo ntfsinfo e:
    NTFS 卷序列号 :       0x12afb454f6e54b31
    版本 :                         3.1
    区数量 :                  0x00000000040270d0
    簇总数 :                  0x0000000000804e1a
    可用簇  :                  0x00000000000b8d41
    保留总数 :                  0x0000000000000000
    每个扇区字节数  :               512
    每个簇字节数 :               4096
    每个 FileRecord 段的字节数    : 1024
    每个 FileRecord 段的簇数 : 0
    Mft 有效数据长度 :           0x00000000058d0000
    Mft 起始 Lcn  :                  0x0000000000000004
    Mft2 起始 Lcn :                  0x0000000000080000
    Mft 区域起始 :                  0x0000000000483740
    Mft 区域结尾   :                  0x000000000049c760

    C:WINDOWS\system32>
    还有一个问题修改了口令,口令长度增加了,按说占用的空间多了,但是查询v$pwfile_users发现还是9条记录?不过这个问题突然想到了答案,那 就是不论我们的口令多长,加密之后的长度几乎都是相同的,也就是说口令文件占用的大小和口令指定的长度几乎关系不大!

    SQL> edit
    已写入 file afiedt.buf
      1  declare
      2     v_string varchar2(100);
      3  begin
      4          for i in 1..100 loop
      5             v_string := 'alter user test'||i||' identified by  aaaaaaaaaaaaaaaaaaaaaa'||i;
      6                  execute immediate v_string ;
      7          end loop ;
      8* end ;
    SQL> /
    PL/SQL 过程已成功完成。

    SQL> declare
      2     v_string varchar2(100);
      3  begin
      4          for i in 1..100 loop
      5             v_string := 'grant sysdba to test'||i;
      6                  execute immediate v_string ;
      7          end loop ;
      8  end ;
      9  /
    declare
    *
    第 1 行出现错误:
    ORA-01996: GRANT 失败: 口令文件 '' 已满
    ORA-06512: 在 line 6

    SQL> select * from v$pwfile_users;
    USERNAME                       SYSDB SYSOP
    ------------------------------ ----- -----
    SYS                            TRUE  TRUE
    TEST1                          TRUE  FALSE
    TEST2                          TRUE  FALSE
    TEST3                          TRUE  FALSE
    TEST4                          TRUE  FALSE
    TEST5                          TRUE  FALSE
    TEST6                          TRUE  FALSE
    TEST7                          TRUE  FALSE
    TEST8                          TRUE  FALSE

    已选择9行。

    SQL>
    E:\oracle\product\10.2.0\db_1\data\base>orapwd file=E:\oracle\product\10.2.0\db_1
    databasepwd.ora password=system entries=5
    OPW-00005: 存在相同名称的文件 - 请删除或重命名

    E:\oracle\product\10.2.0\db_1\data\base>orapwd file=E:oracleproduct10.2.0db_1
    databasepwd.ora password=system entries=5 force=y

    创建口令文件需要注意的是=前后没有空格!另外值得一提的是10g增加了一个新的参数force default值n,它的作用类似于创建表空间时的reuse功能,当同名文件存在时是否覆盖。

    是否使用口令文件,是通过oracle提供的一个参数remote_login_passwordfile来控制的, remote_login_passwordfile有none,shared,exclusive3个值,none表示不使用口令文件, exclusive表示实例独占使用口令文件,也就是各自实例使用单独的口令文件,shared表示多个实例共享一个口令文件,缺省情况下,win下口令 文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感),unix下寻找口令文件的顺序是oracle_home\dbs \orapwSID,如果找不到,会在dbs目录想寻找orapw文件,如果找不到9i下会报错,数据库可以启动到mount状态,当然再次alter database open之后还是可以打开数据库。10g下open数据库时不在检查口令文件。win下如果在oracle_home/database/下找不到 pwdsid.ora文件,不会寻找任何文件。这里所说的win下如果找不到PWDsid.ora文件之后不会寻找任何文件其实是相对unix下如果找不 到orapwSID文件之后会寻找orapw文件而言的。其实win下寻找口令文件也是有顺序的。寻找顺序是这样的:首先寻找注册表中 ora_sid_pwfile环境变量所指向的口令文件,其次寻找ora_pwfile执行的口令文件,最后才寻找$ ORACLE_HOME/database/PWDsid.ora,下面做一个简单的测试:

    开始存在一个口令文件PWDtsid.ora,之后又创建了两个口令文件pwd.ora和orapwd.ora
    C:>orapwd file=E:\oracle\product\10.2.0\db_1\databasepwd.ora password=manager entries=5 force=y

    C:>orapwd file=E:\oracle\product\10.2.0\db_1\databaseorapwd.ora password=manager_system entries=5

    C:>e:
    E:>cd E:\oracle\product\10.2.0\db_1\database

    E:\oracle\product\10.2.0\db_1\database>dir *pwd*

     驱动器 E 中的卷没有标签。
     卷的序列号是 F6E5-4B31
     E:\oracle\product\10.2.0\db_1\database 的目录

    2007-12-07  21:30             2,048 orapwd.ora
    2007-12-07  21:29             2,048 pwd.ora
    2007-12-06  21:44             2,048 PWDtsid.ora

    3个口令文件的口令分别是system, manager, system_manager没有什么特别的意义,都是随意指定的,其中在注册表中ora_tsid_pwfile指向了文件E:\oracle\ product\10.2.0\db_1\databasepwd.ora,ora_pwfile指向了E:\oracle\product \10.2.0\db_1\databaseorapwd.ora,然后通过远程client端进行测试:

    SQL> connect sys/system@testdb as sysdba
    ERROR:
    ORA-01017: 用户名/口令无效; 登录被拒绝
    警告: 您不再连接到 ORACLE。

    SQL> connect sys/manager@testdb as sysdba
    已连接。

    SQL> connect sys/manager_system@testdb as sysdba
    ERROR:
    ORA-01017: 用户名/口令无效; 登录被拒绝
    警告: 您不再连接到 ORACLE。

    SQL> 

    测试结果显示要求输入的口令是manager,而manager对应的口令文件是环境变量ora_tsid_pwfile所指向的pwd.ora,之后删除环境变量ora_tsid_pwfile再次连接:


    SQL> connect sys/system@testdb as sysdba
    ERROR:
    ORA-01017: 用户名/口令无效; 登录被拒绝
    警告: 您不再连接到 ORACLE。

    SQL> connect sys/manager_system@testdb as sysdba
    已连接。

    SQL> 
    这次要求输入的口令是manager_system,而manager_system对应的口令文件是环境变量ora_pwfile所指向的orapwd.ora,之后删除环境变量ora_pwfile进行连接测试:

    SQL> connect sys/system@testdb as sysdba
    已连接。

    SQL> 

    连接成功,system对应的口令文件正是$ORACLE_HOME/database/PWDtsid.ora

    接着上面介绍共享口令文件,由于在unix下会寻找orapw文件(该文件不含sid的信息),因此各个实例可以shared口令文件,前提是需要把参数 remote_login_passwordfile设置为shared,该参数是静态参数,修改之后需要重启实例,当然也可以通过连接的方式(unix 下ls)实现口令文件共享,不过没感觉到共享口令文件有什么好处;win下可以通过在注册表中指定环境变量ora_sid_pwfile或者 ora_pwfile来改变口令文件的位置和名称,从而也可以实现口令文件共享。

    共享口令文件会有很多问题:
    首先要求所有的sys口令相同,其次orcl库上的用户xys被授予了sysdba,结果在test1库上通过v$pwfile_users也可以看到xys用户。

    SQL> connect sys/system as sysdba
    ERROR:
    ORA-01017: invalid username/password; logon denied

    SQL> connect sys/manager as sysdba
    已连接到空闲例程。

    SQL> startup
    ORACLE 例程已经启动。
    Total System Global Area 167772160 bytes
    Fixed Size 1247900 bytes
    Variable Size 62915940 bytes
    Database Buffers 100663296 bytes
    Redo Buffers 2945024 bytes
    数据库装载完毕。
    数据库已经打开。

    SQL> alter user sys identified by system;
    用户已更改。

    SQL> show user
    USER 为 SYS;

    SQL> show parameter db_name
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    db_name string test1

    SQL> select * from v$pwfile_users;
    USERNAME SYSDB SYSOP
    ------------------------------ ----- -----
    SYS TRUE TRUE
    XYS TRUE FALSE

    SQL> select username from dba_users;
    USERNAME
    ------------------------------
    OUTLN
    SYS
    SYSTEM
    TEST
    DBSNMP
    TSMSYS
    DIP
    已选择7行。

    从上面查询结果看到数据库orcl和test1,准确的说是实例共享了口令文件之后,test1中根本不存在用户xys,但是通过v$pwfile_users还是查询出来了

    还有一个问题是如果remote_login_passwordfile=shared则sys的口令通过

    alter user...不能修改!

    SQL> show parameter remote_log
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    remote_login_passwordfile            string      SHARED

    SQL> alter user sys identified by manager;
    alter user sys identified by manager
    *
    第 1 行出现错误:
    ORA-28046: 不允许更改 SYS 口令

    提到alter user...这个系统权限,我觉得oracle做的不是很安全,只要有了alter user权限,sys用户的口令可以随意修改

    ,另外凡是修改具有sysdba or sysoper权限的用户,如果通过alter user来修改口令,那么同时修改了口令文件和数据库中的口令。

    简单的测试如下:
    SQL> create user test11 identified by test11;
    用户已创建。

    SQL> grant connect , alter user to test11;
    授权成功。

    SQL> connect test11/test11
    已连接。

    SQL> CONNECT / as sysdba
    已连接。

    SQL> grant select on dba_users to test11;
    授权成功。

    SQL> connect test11/test11
    已连接。

    SQL> col username format a10
    SQL> col password format a30
    SQL> select password , username from dba_users where username ='SYS';
    PASSWORD                       USERNAME
    ------------------------------ ----------
    75800913E1B66343               SYS

    SQL> show user
    USER 为 TEST11;

    SQL> alter user sys identified by manager;
    用户已更改。

    SQL> select password , username from dba_users where username ='SYS';
    PASSWORD                       USERNAME
    ------------------------------ ----------
    5638228DAF52805F               SYS

    SQL>

    remote_login_passwordfile=shared时,也不能把sysdba or sysoper授予普通用户!

    SQL> grant sysdba to test;
    grant sysdba to test
    *
    第 1 行出现错误:
    ORA-01999: 口令文件不能在 SHARED 模式下更新

    SQL> grant sysoper to test;
    grant sysoper to test
    *
    第 1 行出现错误:
    ORA-01999: 口令文件不能在 SHARED 模式下更新

    通过上面两部分内容的解释,了解了os认证和口令文件之后,如果为了安全不想让用户以sysdba or sysoper权限连接数据库,可以通过上面的方法屏蔽os认证的同时静止使用口令文件。

    3、sysdba 和 sysoper
    很多人可能不了解sysdba and sysoper到底是什么,其实他们是oracle的system privilege,通过查询系统权限表system_privilege_map可以清楚的知道:

    SQL> select name from system_privilege_map where name like 'SYS%';
    NAME
    ----------------------------------------------------------------------------
    SYSOPER
    SYSDBA

    只不过这两个权限就是以这种方式发挥作用的!

    两种权限的比较在oracle doc上给出了明确的交代:
    The following operations are authorized by the SYSDBA and SYSOPER system privileges:
    System Privilege Operations Authorized 
    SYSDBA Perform. STARTUP and SHUTDOWN operations 
    ALTER DATABASE: open, mount, back up, or change character set
    CREATE DATABASE
    DROP DATABASE
    CREATE SPFILE
    ALTER DATABASE ARCHIVELOG
    ALTER DATABASE RECOVER
    Includes the RESTRICTED SESSION privilege
    Effectively, this system privilege allows a user to connect as user SYS.
    SYSOPER Perform. STARTUP and SHUTDOWN operations 
    CREATE SPFILE
    ALTER DATABASE OPEN/MOUNT/BACKUP
    ALTER DATABASE ARCHIVELOG
    ALTER DATABASE RECOVER (Complete recovery only. Any form. of incomplete recovery, such as UNTIL TIME|CHANGE|CANCEL|CONTROLFILE requires connecting as SYSDBA.)
    Includes the RESTRICTED SESSION privilege
    This privilege allows a user to perform. basic operational tasks, but without the ability to look at user data.

    值的一提的是win下尤其是home版的xp控制面板中没有组的可操作界面,而oracle默认安装之后也没有为我们创建ora_oper 这个组,因此在以sysoper权限连接数据库时提示没有权限:

    SQL> connect / as sysoper
    ERROR:
    ORA-01031: 权限不足

    为了能够以sysoper方式连接数据库,于是可以通过dos命令方式创建ora_oper组,同时把os用户加入到这个组中:

    E:>net  localgroup ora_oper /add
    命令成功完成。

    E:>net  localgroup ora_oper wch /add
    命令成功完成。

    有关localgroup的详细说明可以通过命令net help localgroup获得更多的帮助,注意和group的区别,group用在domain中
    再次尝试接连,连接成功:
    SQL> connect / as sysoper
    已连接。

    SQL> show user
    USER 为 PUBLIC;

    SQL>
    但是需要注意的是以sysoper权限连接数据库时显示的schema是public,而以sysdba连接时显示的schema是我们众所周知的sys,这也是sysdba和sysoper的区别之一。

    同时需要注意的是在linux下默认是可以以sysoper 连接数据库的:

    [oracle@xys oracle]$ sqlplus /nolog
    SQL*Plus: Release 11.1.0.6.0 - Production on Fri Dec 7 23:52:49 2007
    Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    SQL> connect / as sysoper
    Connected to an idle instance.

    SQL> create user wch identified externally;
    用户已创建。

    SQL> grant create session to wch;
    授权成功。

    SQL> show parameter auth
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- -------------------------
    os_authent_prefix                    string      OPS$
    remote_os_authent                    boolean     FALSE

    SQL> col username format a10
    SQL> col password format a30
    SQL> select username , password from dba_users where username='WCH';
    USERNAME   PASSWORD
    ---------- ------------------------------
    WCH        EXTERNAL

    SQL> connect /
    ERROR:
    ORA-01017: 用户名/口令无效; 登录被拒绝
    警告: 您不再连接到 ORACLE。

    SQL>

使用普通用户os认证的好处是可以在执行一些批处理脚本时屏蔽数据库连接用户的口令,如exp ,expdp . sqlldr等

 QQ咨询惜分飞

©

 
       



>>>>>>>>>>

 
       








&

          

img_e3029f287d989cd04bd75432ecc1c172.png
DBA笔试面试讲解群
《DBA宝典》读者群 欢迎与我联系



目录
相关文章
|
15天前
|
缓存 Linux Windows
初识Linux操作系统(根目录下的重要文件)(命令提示符的含义)
Linux系统基于&quot;一切皆文件&quot;的理念,重要文件分布在如/root(root用户目录)、/home(普通用户目录)、/etc(应用配置)、/dev(设备文件)、/boot(内核及启动文件)、/proc(动态系统信息)、/lib64(库文件)、/opt(软件存放)、/tmp(临时文件)。&quot;[root@localhost ~]#&quot;代表管理员在root目录,&quot;$&quot;代表普通用户。创建新用户用`useradd`命令。调节终端字体大小:Ctrl+Shift++增大,Ctrl+减号缩小。绝对路径从根目录开始,相对路径从当前目录开始。
|
21天前
|
Unix 关系型数据库 API
Python OS 文件/目录方法
Python OS 文件/目录方法
|
7天前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错合集之RocksDB在尝试打开更多文件时达到了操作系统允许的最大打开文件数限制,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
Oracle 关系型数据库 Linux
Oracle Linux: How To Disable NUMA At OS Level (Doc ID 2193586.1)
Oracle Linux: How To Disable NUMA At OS Level (Doc ID 2193586.1)
25 1
|
1月前
|
Ubuntu Linux iOS开发
LabVIEW在不同操作系统上使VI、可执行文件或安装程序
LabVIEW在不同操作系统上使VI、可执行文件或安装程序
28 3
|
1月前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
52 2
|
20天前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
|
20天前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
|
1月前
|
Linux Shell
Linux操作系统下查找大文件或目录的技巧
Linux操作系统下查找大文件或目录的技巧
18 2
|
25天前
|
Python
Python OS 文件/目录方法
Python OS 文件/目录方法

推荐镜像

更多