AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 275148
Accepted
r0tt
r0tt
Asked: 2020-09-09 04:52:29 +0800 CST2020-09-09 04:52:29 +0800 CST 2020-09-09 04:52:29 +0800 CST

在 Oracle 数据库中更改 sys 的密码需要什么权限?

  • 772

我们的身份管理工具希望定期更改 sys 密码。它因 ORA-01031 而失败。我需要授予身份管理工具用户哪些权限或角色才能更改 sys 密码?

oracle password
  • 4 4 个回答
  • 2370 Views

4 个回答

  • Voted
  1. Best Answer
    Connor McDonald
    2020-09-09T15:49:23+08:002020-09-09T15:49:23+08:00

    您需要以具有 SYSDBA 权限的用户身份进行连接。即使“更改任何用户”也不够。

    SQL> select *
      2  from   session_privs
      3  where  privilege like 'ALTER ANY%';
    
    PRIVILEGE
    ----------------------------------------
    ALTER ANY TABLE
    ALTER ANY CLUSTER
    ALTER ANY INDEX
    ALTER ANY SEQUENCE
    ALTER ANY ROLE
    ALTER ANY PROCEDURE
    ALTER ANY TRIGGER
    ALTER ANY MATERIALIZED VIEW
    ALTER ANY TYPE
    ALTER ANY LIBRARY
    ALTER ANY OPERATOR
    ALTER ANY INDEXTYPE
    ALTER ANY DIMENSION
    ALTER ANY OUTLINE
    ALTER ANY EVALUATION CONTEXT
    ALTER ANY RULE SET
    ALTER ANY RULE
    ALTER ANY SQL PROFILE
    ALTER ANY EDITION
    ALTER ANY ASSEMBLY
    ALTER ANY MINING MODEL
    ALTER ANY CUBE DIMENSION
    ALTER ANY CUBE
    ALTER ANY SQL TRANSLATION PROFILE
    ALTER ANY MEASURE FOLDER
    ALTER ANY CUBE BUILD PROCESS
    ALTER ANY ATTRIBUTE DIMENSION
    ALTER ANY HIERARCHY
    ALTER ANY ANALYTIC VIEW
    
    29 rows selected.
    
    SQL> alter user sys identified by newpass;
    alter user sys identified by newpass
    *
    ERROR at line 1:
    ORA-01031: insufficient privileges
    
    • 2
  2. Phill W.
    2020-09-10T02:36:04+08:002020-09-10T02:36:04+08:00

    我们的身份管理工具要定期更改sys密码...

    我认为这是不明智的。

    SYS 密码不仅可以供Oracle 数据库使用。

    DataGuard Broker 和 Enterprise Manager 是我想到的两个。后者将在某个时候将 SYS 密码存储在其中(鉴于 OEM 倾向于为您“记住”事情,这几乎是不可避免的)因此定期更改 SYS 密码可能会给您带来问题。

    我似乎还记得 OEM代理也可以使用它(用于自动故障转移?)所以定期从您下面更改此密码比您想象的要危险得多。

    我在这里假设您的意思是 SYS 密码,复数,因为当然,每个Oracle 安装都必须有自己的凭据,与其他所有安装分开,并且您必须至少有两个安装(测试和实时)!

    • 1
  3. miracle173
    2020-09-10T23:51:37+08:002020-09-10T23:51:37+08:00

    我正在使用 Oracle 11.2:

    SQL>select banner
      2  from v$version
      3  /
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    PL/SQL Release 11.2.0.4.0 - Production
    CORE    11.2.0.4.0  Production
    TNS for Solaris: Version 11.2.0.4.0 - Production
    NLSRTL Version 11.2.0.4.0 - Production
    

    要修改用户的密码,需要“ALTER USER”权限。

    SQL>connect / as sysdba
    Connected.
    SQL>create user myuser identified by myuser;
    
    User created.
    
    SQL>grant create session to myuser;
    
    Grant succeeded.
    
    SQL>grant alter user to myuser;
    
    Grant succeeded.
    
    SQL>connect myuser/myuser
    Connected.
    SQL>alter user sys identified by HalloWorld;
    
    User altered.
    
    SQL>
    

    所以 ALTER USER 是一个非常危险的特权。用户可以更改 SYS 密码,以 SYS 身份登录,并可以修改/读取/删除数据库。因此,您应该执行以下操作

    1. 创建一个模式,例如 SECURE,并将 ALTER USER 授予此模式
    2. 在此模式中创建一个修改 SYS 密码的过程,例如 PROCEDURE CHANGE_SYSPW(new_syspw)
    3. 将 EXECUTE CHANGE_SYSPW 授予应该能够更改 SYS 密码的用户

    这是一个例子

    SQL>connect / as sysdba
    Connected.
    SQL>create user secure identified by secure;
    
    User created.
    
    SQL>grant create procedure to secure;
    
    Grant succeeded.
    
    SQL>grant alter user to secure;
    
    Grant succeeded.
    
    SQL>create or replace procedure secure.change_syspw(new_syspw varchar2)
      2  as
      3  begin
      4  EXECUTE IMMEDIATE 'alter user sys identified by "'||new_syspw||'"';
      5  end;
      6  /
    
    Procedure created.
    
    SQL>create user myuser identified by myuser;
    
    User created.
    
    SQL>grant create session to myuser;
    
    Grant succeeded.
    
    SQL>grant execute on secure.change_syspw to myuser;
    
    Grant succeeded.
    
    SQL>connect myuser/myuser
    Connected.
    SQL>exec secure.change_syspw('HalloWorld')
    
    PL/SQL procedure successfully completed.
    
    SQL>
    
    • 1
  4. Balazs Papp
    2020-09-11T04:20:30+08:002020-09-11T04:20:30+08:00

    这是 12.2 中记录的行为更改:

    RDBMS 12.2 - 被授予 ALTER USER 系统权限的用户无法更改 SYS 密码(文档 ID 2263715.1)

    症状

    自 Oracle RDBMS 12.2.0.1 起,被授予 ALTER USER 系统权限的用户无法更改 SYS 密码。这在早期版本中是可能的。

    原因

    这是预期的行为。

    解决方案

    从 Oracle RDBMS 12.2 开始,具有 ALTER USER 权限的用户将不再能够更改 SYS 用户的任何属性(密码、配置文件、配额等)。

    还有一种解决方法可以解决此问题。我们可以在 sys 模式下创建一个过程,其中包括更改用户命令以更改 sys 密码并将此过程的执行权限授予系统用户。

    • 1

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve