Oracle 正在根据Oracle Database Security Guide弃用 OS 身份验证,其中说
请注意,REMOTE_OS_AUTHENT 参数在 Oracle 数据库 11g 第 1 版 (11.1) 中已被弃用,并且仅为了向后兼容而保留。
此外,大多数安全信息和工具都认为 操作系统(外部)身份验证是一个安全问题。我试图理解为什么会这样。以下是我看到的操作系统身份验证的一些优点:
- 如果没有操作系统身份验证,应用程序必须将密码存储在各种应用程序中,每个应用程序都有自己的安全模型和漏洞。
- 域身份验证必须是安全的,因为如果不是,那么数据库安全性只会减慢对数据库的访问速度,但无法阻止它。
- 随着他们必须连接的不同数据库数量的增加,与创建更不安全的数据库密码相比,只需记住一个域密码的用户可以更容易地创建更安全的域密码。
考虑以下场景:
gaius
,具有外部身份验证,因此在 Oracle 中有一个对应的用户名为ops$gaius
. 登录到 shell 时,我也可以直接登录到我的 Oracle 模式,而且我的 cron 作业也不需要嵌入在脚本中的密码。rlogin
/过去相同)rsh
gaius
并以该用户身份运行 SQL*PlusOSUSER
在V$SESSION
)是gaius
并将远程用户记录为ops$gaius
这不仅很容易被欺骗,而且戴上我愤世嫉俗的帽子,甲骨文不能再通过向您出售他们花哨的单点登录产品来赚钱......顺便说一句,这确实满足了您作为操作系统优势提出的所有要点-级别的身份验证。两个比一个更好的密码完全是虚假的;无论如何,大多数人都会将它们设置为相同(Oracle 中没有机制可以防止这种情况发生)。
一般原则是,当攻击者具有物理访问权限时,在软件中进行防御是极其困难的。永远不要相信客户。
它增加了单点故障并扩大了数据的风险面。
获得系统访问权限的攻击者将通过操作系统身份验证访问数据库。通过要求对数据库进行更安全的访问,潜在的攻击者必须提升他们在受感染系统上的权限以获得 root 或 oracle 访问权限,而不是任何用户。
这个问题是外部访问数据库的功能。如果没有外部访问权限并且机器是完全安全的,那么权限问题就没有实际意义。但是,如果开发人员有权访问,操作系统级别的用户权限会增加潜在安全灾难的范围。
考虑使用多层访问来限制安全漏洞的范围,并为任何用户、应用程序或客户端提供所需的访问权限,而无需为每个实例创建操作系统级别的帐户。
Gaius 已经指出为什么远程操作系统身份验证(相对于普通操作系统身份验证,您允许本地计算机用户访问数据库而无需指定单独的密码)相对不安全。
我预计 Oracle 会朝着这个方向发展,因为它希望鼓励人们使用企业用户(或成熟的身份管理套件)而不是远程操作系统认证的用户。企业用户与远程操作系统验证用户具有相同的优势,但 Oracle 实际上是在使用您的 Active Directory 服务器来验证用户身份。您无需将安全检查留给客户端计算机即可获得相同的单点登录优势。
您特别指出了身份风格的身份验证,但我还想指出,将数据库或任何其他登录名与操作系统登录名绑定的其他方法同样糟糕。(无论是本地密码文件、LDAP 还是用于实际存储凭据的任何内容)
如果您允许远程连接到数据库(或网络服务器,或任何进行身份验证的设备),某些操作系统将忽略可能设置为难以暴力破解帐户的规则(例如,阻止失败尝试来自的 IP;锁定用户在一定数量的失败后的一段时间内,等等)。通常,这些规则与身份验证系统相关联
sshd
,而不是整个身份验证系统。因此,如果有人能够远程连接到数据库/网络服务器/任何东西,他们可以暴力破解密码,因为数据库往往没有相同的机制来减慢尝试速度,然后在他们找到必要的凭据后 ssh 进入。