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 / 问题 / 299
Accepted
Leigh Riffel
Leigh Riffel
Asked: 2011-01-06 10:34:29 +0800 CST2011-01-06 10:34:29 +0800 CST 2011-01-06 10:34:29 +0800 CST

为什么操作系统身份验证被认为是 Oracle 数据库的低安全性?

  • 772

Oracle 正在根据Oracle Database Security Guide弃用 OS 身份验证,其中说

请注意,REMOTE_OS_AUTHENT 参数在 Oracle 数据库 11g 第 1 版 (11.1) 中已被弃用,并且仅为了向后兼容而保留。

此外,大多数安全信息和工具都认为 操作系统(外部)身份验证是一个安全问题。我试图理解为什么会这样。以下是我看到的操作系统身份验证的一些优点:

  1. 如果没有操作系统身份验证,应用程序必须将密码存储在各种应用程序中,每个应用程序都有自己的安全模型和漏洞。
  2. 域身份验证必须是安全的,因为如果不是,那么数据库安全性只会减慢对数据库的访问速度,但无法阻止它。
  3. 随着他们必须连接的不同数据库数量的增加,与创建更不安全的数据库密码相比,只需记住一个域密码的用户可以更容易地创建更安全的域密码。
oracle oracle-11g-r2
  • 4 4 个回答
  • 16599 Views

4 个回答

  • Voted
  1. Best Answer
    Gaius
    2011-01-28T06:03:12+08:002011-01-28T06:03:12+08:00

    考虑以下场景:

    1. 在 Oracle 服务器上有一个名为 Unix 的用户gaius,具有外部身份验证,因此在 Oracle 中有一个对应的用户名为ops$gaius. 登录到 shell 时,我也可以直接登录到我的 Oracle 模式,而且我的 cron 作业也不需要嵌入在脚本中的密码。
    2. 允许远程操作系统身份验证,前提是 LAN 100% 安全并且客户端可以信任(与通常允许的rlogin/过去相同)rsh
    3. 攻击者通过任何方式将他或她的笔记本电脑连接到 LAN,知道我在那里工作,并在他们的笔记本电脑上创建一个本地用户,gaius并以该用户身份运行 SQL*Plus
    4. Oracle 看到(即OSUSER在V$SESSION)是gaius并将远程用户记录为ops$gaius

    这不仅很容易被欺骗,而且戴上我愤世嫉俗的帽子,甲骨文不能再通过向您出售他们花哨的单点登录产品来赚钱......顺便说一句,这确实满足了您作为操作系统优势提出的所有要点-级别的身份验证。两个比一个更好的密码完全是虚假的;无论如何,大多数人都会将它们设置为相同(Oracle 中没有机制可以防止这种情况发生)。

    一般原则是,当攻击者具有物理访问权限时,在软件中进行防御是极其困难的。永远不要相信客户。

    • 16
  2. Brian Ballsun-Stanton
    2011-01-07T03:13:05+08:002011-01-07T03:13:05+08:00

    它增加了单点故障并扩大了数据的风险面。

    获得系统访问权限的攻击者将通过操作系统身份验证访问数据库。通过要求对数据库进行更安全的访问,潜在的攻击者必须提升他们在受感染系统上的权限以获得 root 或 oracle 访问权限,而不是任何用户。

    这个问题是外部访问数据库的功能。如果没有外部访问权限并且机器是完全安全的,那么权限问题就没有实际意义。但是,如果开发人员有权访问,操作系统级别的用户权限会增加潜在安全灾难的范围。

    考虑使用多层访问来限制安全漏洞的范围,并为任何用户、应用程序或客户端提供所需的访问权限,而无需为每个实例创建操作系统级别的帐户。

    • 8
  3. Justin Cave
    2011-01-28T11:44:32+08:002011-01-28T11:44:32+08:00

    Gaius 已经指出为什么远程操作系统身份验证(相对于普通操作系统身份验证,您允许本地计算机用户访问数据库而无需指定单独的密码)相对不安全。

    我预计 Oracle 会朝着这个方向发展,因为它希望鼓励人们使用企业用户(或成熟的身份管理套件)而不是远程操作系统认证的用户。企业用户与远程操作系统验证用户具有相同的优势,但 Oracle 实际上是在使用您的 Active Directory 服务器来验证用户身份。您无需将安全检查留给客户端计算机即可获得相同的单点登录优势。

    • 4
  4. Joe
    2011-01-29T03:37:58+08:002011-01-29T03:37:58+08:00

    您特别指出了身份风格的身份验证,但我还想指出,将数据库或任何其他登录名与操作系统登录名绑定的其他方法同样糟糕。(无论是本地密码文件、LDAP 还是用于实际存储凭据的任何内容)

    如果您允许远程连接到数据库(或网络服务器,或任何进行身份验证的设备),某些操作系统将忽略可能设置为难以暴力破解帐户的规则(例如,阻止失败尝试来自的 IP;锁定用户在一定数量的失败后的一段时间内,等等)。通常,这些规则与身份验证系统相关联sshd,而不是整个身份验证系统。

    因此,如果有人能够远程连接到数据库/网络服务器/任何东西,他们可以暴力破解密码,因为数据库往往没有相同的机制来减慢尝试速度,然后在他们找到必要的凭据后 ssh 进入。

    • 4

相关问题

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

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

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

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

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

Sidebar

Stats

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

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +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