AG阅读总结10.3——密码文件管理*

简介: 一、密码文件     作用:主要进行DBA权限的身份认证     DBA用户:具有sysdba,sysoper权限的用户被称为dba用户。默认情况下sysdba角色中存在sys用户,sysoper角色中存在system用户     二、Oracle的两种认证方式;     1.

一、密码文件

    作用:主要进行DBA权限的身份认证

    DBA用户:具有sysdbasysoper权限的用户被称为dba用户。默认情况下sysdba角色中存在sys用户,sysoper角色中存在system用户

   

二、Oracle的两种认证方式;

    1.使用与操作系统集成的身份验证

    2.使用Oracle数据库的密码文件进行身份认证

 

三、密码文件的位置

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

                  即:ORACLE_HOME/dbs/orapw<sid>

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

 

    密码文件查找的顺序

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

 

    两种认证方式:类型与SQL server中的windows认证和SQL server认证

    决定在两个参数中

    1.remote_login_passwordfile = none | exclusive |shared  位于$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora参数文件中

       none : 不使用密码文件认证

       exclusive :要密码文件认证,自己独占使用(默认值)

       shared :要密码文件认证,不同实例dba用户可以共享密码文件

      

    2. $ORACLE_HOME/network/admin/sqlnet.ora 

       SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)

       none : 表示关闭操作系统认证,只能密码认证

       all : 用于linuxunix平台,关闭本机密码文件认证,采用操作系统认证,但远程<异机>可以使用密码文件认证

       nts : 用于windows平台

      

    不同的组合

      1           2

    none          none      sys用户无论是本机还是远程均不可用

  

    判断当前使用的是操作系统认证还是密码认证

   

四、演示:

    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, OLAP and 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, OLAP and 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: Authentication service failed to initialize

 

    Enter user-name:

 

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

 

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

 

    

五、密码文件的建立:orapwd  

    [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 existing file (opt), /*10g新增的参数,默认值为n ,y表示允许覆盖*/

    OPERs (opt),

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

     

    --修改密码:

    [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@orcl as 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, OLAP and Data Mining options

 

    SQL>  

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

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

 

    OPW-00005: File with same name exists - please delete 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 改为1,然后将多个用户设置为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 增加20个新用户

    SQL> begin

      2  for i in 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 i in 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: password file '' 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

 

 

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

 

    

六、导致密码文件内容修改的几种方式:

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

    2.使用alter user sys identified by <>

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

 

七、查看密码文件内容 */

 

    [oracle@robinson dbs]$ strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    F7AC0C5E9C3C37AB

    E100B964899CDDDF

 

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

    SQL> alter user sys identified by oracle;

 

    User altered

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

    SQL> ho strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    AB27B53EDC5FEF41

    8A8F025737A9097A

 

 

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

    SQL> grant sysdba to 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@orcl as 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, OLAP and Data Mining options

 

    SQL> show user

    USER is "SYS"

 

    

八、sysdba sysoper的区别

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

 

     PRIVILEGE NAME                                       PROPERTY

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

           -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 method of authentication that you use.

 

    When you connect with SYSDBA or SYSOPER privileges, you connect with a default schema,

    not with the schema that is generally associated with your username.

    For SYSDBA this schema is 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@orcl as sysdba

    Connected.

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

    ERROR:

    ORA-01031: insufficient privileges

 

 

    Warning: You are no longer connected to ORACLE.

    SQL> conn user1/user1@orcl as sysdba

    ERROR:

    ORA-01031: insufficient privileges

 

    SQL> conn user1/user1 as sysoper

    Connected.


 

1.2  OS 认证相关的参数

       Oracle数据库通过如下3个参数来实现OS 认证:

(1)sqlnet.ora中的 SQLNET.AUTHENTICATION_SERVICES参数。

(2)PFILE(或SPFILE)文件中的参数REMOTE_LOGIN_PASSWORDFILE

(3)口令文件PWDsid.ora(windows)或者 orapwSID(linux,大小写敏感)。

 

1.2.2  REMOTE_LOGIN_PASSWORDFILE 参数

该参数可以有如下值:

       REMOTE_LOGIN_PASSWORDFILE ='NONE'|'EXCLUSIVE'|'SHARED'

 

       1NONE不使用密码文件登录、不允许远程用户用sys登录系统、可以在线修改sys的密码;

       2EXCLUSIVE:默认值。只允许一个数据库使用该密码文件、允许远程登录、允许非sys用户以sysdba身份管理数据库、可以在线修改sys的密码。在这种模式下,口令文件可以包含用于多个特许的Oracle账户的口令。这是推荐的操作模式,特别是在运行RMAN时。如果希望将RMAN与来自于远程客户端的数据库连接,则必须使用该参数设置。

      3SHARE可以多个数据库使用密码文件。实际上是这样的: Oracle数据库在启动时,首先查找的是orapw<sid>的口令文件,如果该文件不存在,则开始查找,orapw的口令文件如果口令文件命名为orapw,多个数据库就可以共享、允许远程登录、只能用sys进行sysdba管理、可以在线修改sys的密码。在此设置下只有INTERNAL/SYS帐号能被识别,即使文件中存有其它用户的信息,也不允许他们以SYSOPER/SYSDBA登录。

 

修改:

SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

 

需要注意的是:这个参数不是动态参数。需要在数据库加载到MOUNT状态下修改,另外改变以后需要重新启动数据库,参数的设置才能够生效。

 

 

1.3 禁用OS认证

OS 认证存在一定的安全隐患,我们可以屏蔽OS认证。

 

1.3.1 windows

       在win下只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注释掉这句话(在前面加上#),就可以屏蔽os功能,要想以sys用户连上数据库必须输入正确的sys口令,或者可以把oracle的安装用户从组ora_dba中删除掉,当然也可以直接把ora_dba这个组也删除,都可以屏蔽os功能.

 

如:

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>

 

1.3.2  LINUX/UNIX 

       在文件sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及删除dba(groupdel dba)组或者把oracle用户从dba组中删除都可以屏蔽os认证。

 

注意:

       使用这种屏蔽方法, 系统管理员还是可以创建ora_dba or dba组以及修改sqlnet.ora文件。

 

 

口令文件

 

2.1 口令文件说明

       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: 数据库未打开

 

2.2 查看具有sysdba 权限的用户

       可以通过查询v$pwfile_users视图来查看有几个用户被授予了sysdba或者sysoper权限, v$pwfile_users的信息就是源于口令文件.

 

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。

 

       注意:事实是口令多长,加密之后的长度几乎都是相同的,也就是说口令文件占用的大小和口令指定的长度几乎关系不大。

 

C:>orapwd file=databasepwd.ora password=system entries=5

OPW-00005: 存在相同名称的文件 - 请删除或重命名

C:>orapwd file=databasepwd.ora password=system entries=5   force=y

 

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

 

       是否使用口令文件,由remote_login_passwordfile参数控制。这个参数在上面有说明。

 

 

2.4  sys/system 密码丢失的处理方法

 

(1).查询视图V$PWFILE_USERS,select * from V$PWFILE_USERS;

  记录下拥有 SYSOPER/SYSDBA 系统权限的用户信息。

(2)关闭数据库 shutdown immediate

(3)将密码文件重命名

(4)用orapwd 命令重建创建密码文件

       orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=admin

 entries=5   force=y

(5)将第一步查出来的用户添加到密码文件

              grant sysdba , sysoper to user;


相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
存储 人工智能 索引
Yalmip入门教程(3)-约束条件的定义
Yalmip入门教程系列博客第三篇,约束条件的定义。
|
文字识别 数据安全/隐私保护
PDF-XChange Editor v10.2.1.386
PDF-XChange Editor,号称打开速度最快最强大的PDF编辑器/PDF阅读器,PDF-XChange专注于PDF文档的编辑,打开PDF文件速度快,软件小功能强大,可以自定义制作PDF电子文档,具有创建,查看,编辑,注释,审阅,添加水印,签名保护,PDF格式转换,PDF文档打印,扫描仪识别,OCR识别页面等功能。
631 1
PDF-XChange Editor v10.2.1.386
|
数据采集 人工智能 自然语言处理
FineWeb 2:开源的多语言预训练数据集,覆盖超过 1000 种语言
FineWeb 2 是由 Hugging Face 推出的多语言预训练数据集,覆盖超过 1000 种语言,支持多种 NLP 任务,如机器翻译和文本分类。该数据集通过定制化的数据处理流程,包括语言识别、去重、内容过滤和 PII 匿名化,提升了多语言模型的性能和泛化能力。
1225 5
FineWeb 2:开源的多语言预训练数据集,覆盖超过 1000 种语言
|
测试技术 程序员 开发工具
Git 最佳实践:分支管理
5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践。最后我为团队选择了这个git分支管理实践 A successful Git branching model ,网上有不少参考这篇文章写的中文版gitflow实践,推荐一个中文版的Git 最佳实践:分支管理。
17373 0
|
机器学习/深度学习 编解码 数据可视化
UNet 和 UNet++:医学影像经典分割网络对比
UNet 和 UNet++:医学影像经典分割网络对比
2372 0
|
传感器 物联网 Android开发
Android蓝牙使用详解(低功耗蓝牙(BLE))
Android蓝牙使用详解(低功耗蓝牙(BLE))
1112 0
|
XML Java Apache
Java 生成PDF文档
最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料。整理之后,发现有如下几个框架可以实现这个功能。 1. 开源框架支持 iText,生成PDF文档,还支持将XML、Html文件转化为PDF文件; Apache PDFBox,生成、合并PDF文档; docx4j,生成docx、pptx、xlsx文档,支持转换为PDF格式。
12055 1
|
物联网 开发者 异构计算
facechain人物写真生成工业级开源
facechain人物写真应用自8月11日开源了第一版证件照生成后。目前在github(GitHub - modelscope/facechain: FaceChain is a deep-learning toolchain for generating your Digital-Twin.)上已有5.7K的star,论文链接:FaceChain: A Playground for Identity-Preserving Portrait Generation:https://arxiv.org/abs/2308.14256。
1525 5
|
11月前
|
存储 监控 图形学
《深挖Unity开发痛点:从动画状态机崩溃到资源加载异常的实战排障指南》
本文结合开放世界冒险游戏开发实例,聚焦Unity开发中三类高频复杂Bug展开分析。在Switch平台,Addressables加载场景后NPC动画状态机失效,因资源加载后未建立强引用致控制器被回收,通过静态列表存储引用解决;动态植被材质在多平台闪烁或丢失,源于共享材质冲突与Shader变体加载问题,经独立材质实例化及预烘焙变体优化;角色跳跃穿斜坡,因物理检测帧间隔长、速度超阈值,调整检测模式与帧率后修复。文中还提炼“现象分类-环境隔离-工具监控-原理溯源”排查法,强调引擎底层认知与跨平台规范的重要性。
491 9
|
运维 安全 Linux
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮

热门文章

最新文章