针对 Autonomous Database 对 Microsoft Azure Active Directory 用户进行身份验证和授权
OAuth2
访问令牌进行连接。关于将 Oracle Autonomous Database on Dedicated Exadata Infrastructure 与 Microsoft Azure AD 集成
可以将 Oracle Autonomous Database on Dedicated Exadata Infrastructure 和 Microsoft Azure AD 配置为允许用户和应用程序使用其 Azure AD 身份证明连接到数据库。
Azure AD 用户和应用程序可以使用 Azure AD 单点登录 (SSO) 身份证明登录以访问数据库。这是通过用户或应用程序首先从 Azure AD 请求 Azure AD OAuth2
访问令牌完成的。此 OAuth2
访问令牌包含用户身份和数据库访问信息,然后发送到数据库。有关配置多因素和无密码身份验证的信息,请参阅 Microsoft 文章Azure Active Directory 的无密码身份验证选项。
您可以在以下 Oracle Database 环境中执行此集成:
- 内部部署 Oracle Database 发行版 19.18 及更高版本
- 共享 Exadata 基础结构上的 Oracle Autonomous Database
- 专用 Exadata 基础结构上的 Oracle Autonomous Database
- Oracle Base Database Service
- Oracle Exadata Cloud Service (Oracle ExaCS)
配置 Azure AD 的说明使用术语 "Oracle Database" 来包含这些环境。
通过这种集成,Azure AD 用户可以访问 Oracle Autonomous Database on Dedicated Exadata Infrastructure 实例。Azure AD 用户和应用程序可以使用 Azure AD 单点登录 (SSO) 凭据登录,以获取要发送到数据库的 Azure AD OAuth2
访问令牌。
Azure AD 管理员创建 Oracle Autonomous Database on Dedicated Exadata Infrastructure 并将其注册到 Azure AD。在 Azure AD 中,这称为应用程序注册,这是应用程序注册的简称。这是 Azure AD 必须了解的有关使用 Azure AD 的软件的数字信息。Azure AD 管理员还为 Azure AD 中的数据库应用程序注册创建应用程序 (app) 角色。应用程序角色将 Azure 用户、组和应用程序连接到数据库方案和角色。Azure AD 管理员将 Azure AD 用户、组或应用程序分配给应用程序角色。这些应用程序角色映射到数据库全局方案或全局角色,或者映射到方案和角色。分配给应用程序角色的 Azure AD 用户、组或应用程序将映射到数据库全局方案、全局角色或同时映射到方案和角色。Oracle 全局方案也可以专门映射到 Azure AD 用户。Azure AD 来宾用户(非组织用户)或 Azure AD 服务主体(应用程序)只能通过 Azure AD 应用程序角色映射到数据库全局方案。Oracle 全局角色只能从 Azure 应用程序角色映射,不能从 Azure 用户映射。
Oracle Autonomous Database on Dedicated Exadata Infrastructure 工具(包括 Oracle APEX、Database Actions、Oracle Graph Studio 和 Oracle Database API for MongoDB)与使用 Azure AD 令牌连接到数据库不兼容。
为支持 Azure AD 令牌而更新的工具和应用程序可以使用 Azure AD 直接验证用户,并将数据库访问令牌传递到 Oracle Autonomous Database on Dedicated Exadata Infrastructure 实例。您可以将现有数据库工具(例如 SQL*Plus)配置为从文件位置使用 Azure AD 标记。在这些情况下,可以使用 Microsoft PowerShell 或 Azure CLI 等工具检索 Azure AD 令牌,并将其放入文件位置。Azure AD OAuth2
数据库访问令牌会发出一个到期时间。Oracle Database 客户端驱动程序将确保令牌的格式有效,并且在将其传递到数据库之前该令牌未过期。该令牌对数据库具有作用域,这意味着该令牌中有关将使用该令牌的数据库的信息。Azure AD 主体在数据库 Azure AD 应用程序注册中分配到的应用程序角色包含在访问令牌中。Azure AD 令牌的目录位置应仅具有足够权限,用户可以将令牌文件写入该位置,数据库客户端应检索这些文件(例如,仅由用户读取和写入)。由于令牌允许访问数据库,因此应在文件系统内对其进行保护。
Azure AD 用户可以使用多种方法从 Azure AD 请求令牌,以打开 Azure 登录窗口以输入其 Azure AD 身份证明。
Oracle Autonomous Database on Dedicated Exadata Infrastructure 接受表示以下 Azure AD 主体的令牌:
- Azure AD 用户,在 Azure AD 租户中注册用户
- 来宾用户,在 Azure AD 租户中注册为来宾用户
- 服务,即注册的应用程序,通过客户端身份证明流作为自身连接到数据库(连接池用例)
Oracle Autonomous Database on Dedicated Exadata Infrastructure 支持以下 Azure AD 验证流:
- 授权代码,最常用于人工用户(而非应用程序),用于在具有浏览器的客户端环境中向 Azure AD 进行验证
- 客户机身份证明,用于作为自身(而不是最终用户)连接的数据库应用程序
- On-Behalf-Of (OBO),其中应用程序代表登录用户请求访问令牌以发送到数据库
- 资源所有者密码凭证 (Resource Owner Password Credential,ROPC),不建议用于生产环境,但可用于难以合并弹出式浏览器用户验证的测试环境。ROPC 需要将 Azure AD 用户名和密码身份证明作为令牌请求调用的一部分。
Microsoft Azure AD 与 an Autonomous Database 集成的架构
Microsoft Azure Active Directory 标记遵循 OAuth2 标准和扩展。使用 Azure AD 令牌访问 Oracle 数据库与使用 OCI IAM 令牌类似。有关详细说明,请参阅 Security Guide 中的 Architecture of the Microsoft Azure AD Integration with an Oracle Database 。
Azure AD 用户映射到 Autonomous Database
Microsoft Azure 用户必须映射到 Autonomous Database 方案并具有必要的权限(通过角色),然后才能向 Autonomous Database 实例进行身份验证。有关在 Microsoft Azure 中映射用户、组和应用程序的不同方式的信息,请参阅安全指南中的映射到 Oracle Database 的 Azure AD 用户。
使用 Azure AD 连接到 an Autonomous Database 的用例
Oracle Database 支持使用 Microsoft Azure Active Directory 连接到 Autonomous Database 实例的三种用例。有关详细信息,请参阅使用 Azure AD 连接到 Oracle Database 的用例。
使用 Oracle Autonomous Database on Dedicated Exadata Infrastructure 验证 Microsoft Azure AD 身份的一般流程
Oracle Database 管理员和 Microsoft Azure AD 管理员角色允许 Azure AD 用户使用 Azure AD OAuth2 访问令牌连接到数据库。
一般过程如下所示:
- Oracle Database 管理员可确保 Oracle Database 环境满足 Microsoft Azure AD 集成的要求。请参阅 Oracle Database Requirements for the Microsoft Azure AD Integration 。
- Azure AD 管理员为数据库创建 Azure AD 应用程序注册,Oracle Database 管理员允许数据库使用 Azure AD 令牌进行数据库访问。
作为应用程序注册过程的一部分,Azure AD 管理员创建用于将 Azure 用户、组和应用程序映射到 Oracle Database 方案和角色的 Azure 应用程序角色。
- Oracle Database 管理员创建全局方案并将其映射到 Azure AD 用户(独占方案映射)或 Azure 应用程序角色(共享方案映射)。Azure AD 用户或应用程序必须映射到一个方案。
- (可选)Oracle 管理员创建全局 Oracle Database 角色并将其映射到 Azure 应用程序角色。
- 希望与 Oracle Autonomous Database on Dedicated Exadata Infrastructure 实例连接的 Azure AD 最终用户将客户端应用程序注册为 Azure AD 客户端(与 Oracle 数据库注册方式类似)。
除非应用程序客户端是公共的,否则 Azure AD 客户端将具有客户端标识和客户端密钥。如果应用程序客户机是公共的,则只需要应用程序客户机标识。
- Azure AD 最终用户(可以是数据库管理员)使用 PowerShell 或 Azure 命令行界面等实用程序进行连接,以检索
OAuth2
数据库访问令牌并将其存储在本地文件目录中。应用程序还可以直接从 Azure AD 请求 Azure ADOAuth2
访问令牌,并将其通过数据库客户端 API 传递。有关传递 Azure ADOAuth2
令牌的信息,请参阅以下 Oracle Database 客户端文档:- JDBC 瘦客户机:Oracle Database JDBC Developer’s Guide
- Oracle Call Interface (OCI):Oracle Call Interface 程序员指南
- Oracle Data Provider for .NET (ODP):Oracle Data Provider for .NET Developer's Guide for Microsoft Windows 连接到 Oracle Database
- 连接到 Oracle Autonomous Database on Dedicated Exadata Infrastructure 实例后,Azure AD 最终用户将根据需要执行数据库操作。
在 Autonomous Database 上启用 Azure AD 验证
Azure AD 管理员和Autonomous Database 管理员执行在 Autonomous Database 上配置 Azure AD 验证的步骤。
Prerequisites
-
Autonomous Database 即将成为版本 19.18 或更高版本。
-
与 TLS 端口 2484 上的数据库连接。不支持非 TLS 连接。
-
与 Azure AD 的出站网络连接,以便数据库可以请求 Azure AD 公钥。
-
要在 Azure AD 中注册的 Autonomous Database 。
-
对于 Exadata Cloud@Customer 部署,环境中的 HTTP 代理设置必须允许数据库使用 Azure AD。
这些设置由组管理员在创建 Exadata Cloud@Customer 基础结构时定义,如 Using the Console to Provision Exadata Database Service on Cloud@Customer 中所述。注意:
只有在 Exadata 基础结构处于 Requires Activation 状态之前,才能编辑包括 HTTP 代理的网络配置。一旦激活,就无法编辑这些设置。为已预配的 Exadata 基础结构设置 HTTP 代理需要在 My Oracle Support 中创建服务请求 (SR)。有关详细信息,请参见在 My Oracle Support 中创建服务请求。
过程
实施以下任务来配置 Microsoft Azure AD 集成的 Autonomous Database 。
-
在 Microsoft Azure AD 租户中注册 Autonomous Database 实例:具有 Azure AD 管理员权限的用户使用 Microsoft Azure AD 将 Oracle Database 实例注册到 Microsoft Azure AD 租户。请参阅安全指南中的使用 Microsoft Azure AD 租户注册 Oracle Autonomous Database 实例。
-
启用 Microsoft Azure AD v2 访问令牌:如果您的组织使用 Microsoft Azure AD v2 访问令牌(而不是 v1 令牌),则可能需要在 Azure AD 中进行其他更改以支持令牌中的
upn:
声明。请参阅启用 Microsoft Azure AD v2 访问令牌和安全指南中的检查 Azure AD 访问令牌版本。 -
在 Microsoft Azure AD 中管理应用程序角色:在 Azure AD 中,您可以创建和管理将分配给 Azure AD 用户和组的应用程序角色,并且还可以映射到 Oracle Database 全局方案和角色。请参阅安全指南中的在 Microsoft Azure AD 中管理应用程序角色。
-
使用 NAT 网关配置到 Microsoft Azure AD 的出站连接:
按照 Oracle Cloud Infrastructure 文档中的创建 NAT 网关中的说明,在 Autonomous Database 资源所在的虚拟云网络 (Virtual Cloud Network,VCN) 中创建 NAT 网关。
After creating the NAT gateway, add a route rule and an egress security rule to each subnet (in the VCN) where Autonomous Database resources reside so that these resources can use the gateway to obtain a public key from your Azure AD instance:
-
转到子网的子网详细信息页。
-
在子网信息选项卡中,单击子网的路由表的名称以显示其路由表详细信息页。
-
在现有路由规则表中,检查是否已存在具有以下特征的规则:
- 目标:0.0.0.0/0
- 目标类型:NAT 网关
- 目标:刚在 VCN 中创建的 NAT 网关的名称
如果不存在此类规则,请单击添加路由规则并添加具有这些特征的路由规则。
-
返回到子网的子网详细信息页。
-
在子网的安全列表表中,单击子网的安全列表的名称以显示其安全列表详细信息页。
-
在侧边菜单的资源下,单击出站规则。
-
在现有出站规则表中,检查是否已存在具有以下特征的规则:
- 目标类型: CIDR
- 目标:0.0.0.0/0
- IP 协议: TCP
- 源端口范围: 443
- 目标端口范围:全部
如果不存在此类规则,请单击添加出站规则并添加具有这些特征的出站规则。
-
-
测试 Entra ID 端点的可访问性
按照安全指南中的测试 Azure 端点的可访问性中概述的步骤,确保 Oracle Database 实例可以访问 Entra ID 端点。
如果数据库无法与 Microsoft Entra ID 端点连接,即使在设置了 ACL 策略之后,仍请检查上面列出的先决条件,以确认您已根据先决条件正确配置了网络。如果问题仍然存在,请查看您的网络以确保数据库实例可以连接到 MS Entra ID 端点。
-
将 Azure AD 配置为 Autonomous Database 的外部身份提供者:
默认情况下,Autonomous Database 和 Autonomous Container Databases 配置为使用 Oracle Cloud Infrastructure (IAM) 验证和授权连接用户。应用程序 DBA 还可以将此方案更改为其他外部验证方案,例如使用 Active Directory (CMU-AD) 或 Kerberos 的集中管理用户。但是,Autonomous Database 一次只能启用一个外部验证方案。
要在 Autonomous Database 实例上启用 Azure AD 作为外部身份提供者,请执行以下操作:
- 以对
DBMS_CLOUD_ADMIN
PL/SQL 程序包具有EXECUTE
权限的用户身份登录到 Autonomous Database 实例。ADMIN 用户具有此权限。 - 由于在任何给定时间只能为 an Autonomous Database 启用一个外部验证方案,因此请运行
DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION
过程以禁用已为数据库启用的任何外部验证方案。要运行该过程,您必须以 ADMIN 用户身份登录,或者对DBMS_CLOUD_ADMIN
具有EXECUTE
特权。BEGIN DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION; END; /
- 使用 Azure AD 所需的参数运行
DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION
过程。BEGIN DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION( type =>'AZURE_AD', params => JSON_OBJECT('tenant_id' VALUE 'tenant_id', 'application_id' VALUE 'application_id', 'application_id_uri' VALUE 'application_id_uri'), force => TRUE ); END;
在此过程中,Azure AD 参数包括:
type
:指定外部验证提供程序。对于 Azure AD,如图所示,使用'AZURE_AD'
。params
:所需 Azure AD 参数的值可从 Azure 门户上的 Azure 注册概览窗格(适用于 Azure Active Directory)。Azure AD 所需的params
为:tenant_id
:Azure 账户的租户 ID。租户 ID 指定 Autonomous Database 实例的 Azure AD 应用程序注册。application_id
:在 Azure AD 中创建的 Azure 应用程序 ID,用于在 Autonomous Database 实例中为外部验证分配角色/方案映射。application_id_uri
:分配给 Azure 应用程序的唯一 URI。这是 Autonomous Database 实例的标识符。名称必须是域限定名称(这支持跨租户资源访问)。
此参数的最大长度为 256 个字符。
force
:如果为 Autonomous Database 实例配置了其他EXTERNAL AUTHENTICATION
方法,并且您希望禁用该方法,则将此参数设置为TRUE
。
例如:BEGIN DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION( type =>'AZURE_AD', params => JSON_OBJECT('tenant_id' VALUE '29981886-6fb3-44e3-82', 'application_id' VALUE '11aa1a11-aaa', 'application_id_uri' VALUE 'https://example.com/111aa1aa'), force => TRUE ); END;
这将设置
IDENTITY_PROVIDER_TYPE
系统参数。例如,您可以使用以下项验证IDENTITY_PROVIDER_TYPE
:SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type'; NAME VALUE ---------------------- -------- identity_provider_type AZURE_AD
- 以对
映射 Oracle Database 方案和角色
Azure AD 用户将映射到一个数据库模式,并且可以选择性地映射到一个或多个数据库角色。
-
将 Oracle Database 方案独占映射到 Microsoft Azure AD 用户:请参阅安全指南中的将 Oracle Database 方案独占映射到 Microsoft Azure AD 用户。
-
将共享 Oracle 方案映射到应用程序角色:请参阅安全指南中的将共享 Oracle 方案映射到应用程序角色。
-
将 Oracle Database Global Role 映射到应用程序角色:请参阅安全指南中的将 Oracle Database Global Role 映射到应用程序角色。
配置到 Azure AD 的客户端连接
您可以通过多种方法将客户端配置为使用 Azure AD 令牌与 Oracle Autonomous Database on Dedicated Exadata Infrastructure 实例连接。
您应该选择最适合您环境的客户端连接方法。本指南提供了将 SQL*Plus 与获取 Azure AD OAuth2 访问令牌的不同方法连接在一起的示例。所有 Oracle Database 发行版 19c 客户机都可以接受作为文件传递的标记。JDBC 瘦驱动程序、即时客户端驱动程序和 ODP.net 驱动程序还通过应用程序中的数据库客户端 API 接受令牌。SQL*Plus 等 Oracle Database 工具无法直接检索令牌,因此必须使用 PowerShell 或 Azure CLI 等工具检索 Azure AD OAuth2
访问令牌。要检索 Azure AD 令牌,客户端必须通过 Azure AD 应用程序注册过程进行注册。注册客户端类似于使用应用程序注册在 Azure AD 中注册 Oracle Autonomous Database on Dedicated Exadata Infrastructure 服务器。数据库和客户端都必须在 Azure AD 中注册。
必须注册数据库,以便客户机可以获得获取数据库访问令牌的权限。客户端必须注册,以便 Azure AD 可以识别可信客户端请求访问令牌。
注意:
在客户端上,必须在sqlnet.ora
文件中设置 TOKEN_AUTH
和 TOKEN_LOCATION
参数,以从某个位置检索 Azure AD 数据库访问令牌,并在使用 /
斜杠登录时使用它。Configure SQL*Plus for Azure AD Access Tokens 中讨论了确切的详细信息。
有关将客户端连接到 Azure AD 的详细信息,请参阅以下 Microsoft Azure 文章:
PowerShell 中 SQL*Plus 客户端连接到 Autonomous Database 的操作流
Azure 用户、Azure AD 和 Autonomous Database 实例之间的连接依赖于在整个组件中传递 OAuth2
令牌。
Refer to Operational Flow for SQL*Plus Client Connection in PowerShell to Oracle Database in Security Guide for an example that shows the use of the Resource Owner Password Credential (ROPC) flow with a public client.
向 Azure AD 应用程序注册注册客户端
-
根据您的用例将 Azure 的数据库客户端注册为机密客户端或公共客户端:机密客户端和公共客户端注册
-
在 Azure AD 中注册数据库客户端应用程序:使用 Azure AD 注册数据库客户端应用程序
检索 Azure AD OAuth2 标记的示例
有关显示检索 Azure AD OAuth2
令牌的不同方式的示例,请参阅安全指南中的检索 Azure AD OAuth2 令牌的示例。
为 Azure AD 访问令牌配置 SQL*Plus
必须将 SQL*Plus 配置为从某个位置检索 Azure AD 数据库访问令牌,并在使用 / 斜杠登录时使用它。有关详细说明,请参阅安全指南中的为 Azure AD 访问令牌配置 SQL*Plus 。
Microsoft Entra ID 连接故障排除
可以使用跟踪文件诊断 Microsoft Entra ID 连接的问题。还可以轻松修复 ORA-12599
和 ORA-03114
错误。
-
您可以使用跟踪文件对 Oracle Database 与 Microsoft Azure AD 的集成进行故障排除。有关指导,请参阅 Database Security Guide 中的 Trace Files for Troubleshooting Oracle Database Client Connections with Azure AD 。
-
ORA-12599: TNS: cryptographic checksum mismatch
和ORA-03114: not connected to ORACLE
错误指示您尝试连接到的数据库受本机网络加密保护。当使用令牌访问 Oracle 数据库时,必须建立传输层安全 (Transport Layer Security,TLS) 连接,而不是网络原生加密。要纠正这些错误,请确保为数据库正确配置了 TLS。应使用本地数据库用户名和密码测试配置,并检查以下
SYSCONTEXT USERENV
参数:NETWORK_PROTOCOL
TLS_VERSION
-
您可以使用 JSON Web Tokens Web 站点检查站点使用的 Microsoft Azure AD 访问令牌版本。有关指导,请参阅数据库安全指南中的检查 Azure AD 访问令牌版本。