对自治 AI 数据库的 Microsoft Azure Active Directory 用户进行验证和授权
OAuth2
访问令牌进行连接。关于将 Oracle Autonomous AI Database on Dedicated Exadata Infrastructure 与 Microsoft Azure AD 集成
可以将 Oracle Autonomous AI 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 AI Database
- 专用 Exadata 基础结构上的 Oracle Autonomous AI Database
- Oracle Base Database Service
- Oracle Exadata Cloud Service (Oracle ExaCS)
配置 Azure AD 的说明使用术语 "Oracle Database" 来包含这些环境。
通过这种集成,Azure AD 用户可以访问 Oracle Autonomous AI Database on Dedicated Exadata Infrastructure 实例。Azure AD 用户和应用程序可以使用 Azure AD 单点登录 (SSO) 凭证登录,以获得要发送到数据库的 Azure AD OAuth2
访问令牌。
Azure AD 管理员在 Azure AD 中创建并注册 Oracle Autonomous AI Database on Dedicated Exadata Infrastructure 。在 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 AI 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 AI 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 身份证明。
基于专用 Exadata 基础设施的 Oracle Autonomous AI Database 接受表示以下 Azure AD 主体的令牌:
- Azure AD 用户,在 Azure AD 租户中注册用户
- 来宾用户,在 Azure AD 租户中注册为来宾用户
- 服务,即注册的应用程序,通过客户端身份证明流作为自身连接到数据库(连接池用例)
基于专用 Exadata 基础设施的 Oracle Autonomous AI Database 支持以下 Azure AD 验证流:
- 授权代码,最常用于人工用户(而非应用程序),用于在具有浏览器的客户端环境中向 Azure AD 进行验证
- 客户机身份证明,用于作为自身(而不是最终用户)连接的数据库应用程序
- On-Behalf-Of (OBO),其中应用程序代表登录用户请求访问令牌以发送到数据库
- 资源所有者密码凭证 (Resource Owner Password Credential,ROPC),不建议用于生产环境,但可用于难以合并弹出式浏览器用户验证的测试环境。ROPC 需要将 Azure AD 用户名和密码身份证明作为令牌请求调用的一部分。
Microsoft Azure AD 集成的架构与自治 AI 数据库
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 AI Database
Microsoft Azure 用户必须映射到 Autonomous AI Database 方案,并具有必要的权限(通过角色),然后才能向 Autonomous AI Database 实例进行验证。See Azure AD Users Mapping to the Oracle Database in Security Guide for information about the different ways of mapping users, groups, and application in Microsoft Azure.
使用 Azure AD 连接到自治 AI 数据库的用例
Oracle Database 支持使用 Microsoft Azure Active Directory 连接到自治 AI 数据库实例的三种用例。有关详细信息,请参阅使用 Azure AD 连接到 Oracle Database 的用例。
使用 Oracle Autonomous AI 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 AI 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 AI Database JDBC Developer’s Guide
- Oracle Call Interface (OCI):Oracle Call Interface Developer's Guide
- Oracle Data Provider for .NET (ODP):Oracle Data Provider for .NET Developer's Guide 连接到 Oracle Database
- 连接到 Oracle Autonomous AI Database on Dedicated Exadata Infrastructure 实例后,Azure AD 最终用户将根据需要执行数据库操作。
在 Autonomous AI Database 上启用 Azure AD 验证
Azure AD 管理员和自治 AI 数据库管理员在 Autonomous AI Database 上执行配置 Azure AD 验证的步骤。
Prerequisites
-
Autonomous AI Database 是 19.18 版或更高版本。
-
与 TLS 端口 2484 上的数据库连接。不支持非 TLS 连接。
-
与 Azure AD 的出站网络连接,以便数据库可以请求 Azure AD 公钥。
-
将在 Azure AD 中注册的 Autonomous AI 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 中创建服务请求。
过程
实施以下任务来配置 Autonomous AI Database for Microsoft Azure AD 集成。
-
使用 Microsoft Azure AD 租户注册 Autonomous AI Database 实例:具有 Azure AD 管理员权限的用户使用 Microsoft Azure AD 将 Oracle Database 实例注册到 Microsoft Azure AD 租户。请参阅安全指南中的注册 Oracle Autonomous AI Database Instance with a Microsoft Azure AD Tenancy 。
-
启用 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 网关中的说明,在虚拟云网络 (VCN) 中创建 Autonomous AI Database 资源所在的 NAT 网关。
创建 NAT 网关后,向每个子网添加路由规则和出站安全规则(在 VCN 中),自治 AI 数据库资源位于该子网中,以便这些资源可以使用网关从 Azure AD 实例获取公钥:
-
转到子网的子网详细信息页。
-
在子网信息选项卡中,单击子网的路由表的名称以显示其路由表详细信息页。
-
在现有路由规则表中,检查是否已存在具有以下特征的规则:
- 目标: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 AI Database 的外部身份提供者:
默认情况下,自治 AI 数据库和自治容器数据库配置为将用户与 Oracle Cloud Infrastructure (IAM) 验证和授权连接起来。应用程序 DBA 还可以将其更改为其他外部验证方案,例如使用 Active Directory 的集中管理用户 (CMU-AD) 或 Kerberos。但是,自治 AI 数据库一次只能启用一个外部验证方案。
要在自治 AI 数据库实例上启用 Azure AD 作为外部身份提供者:
- 以对
DBMS_CLOUD_ADMIN
PL/SQL 程序包具有EXECUTE
权限的用户身份登录到 Autonomous AI Database 实例。ADMIN 用户具有此权限。 - 由于在任何给定时间只能为自治 AI 数据库启用一个外部验证方案,因此请运行
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。Tenant Id 指定 Autonomous AI Database 实例的 Azure AD 应用程序注册。application_id
:在 Azure AD 中创建的 Azure 应用程序 ID,用于在 Autonomous AI Database 实例中为外部验证分配角色/方案映射。application_id_uri
:分配给 Azure 应用程序的唯一 URI。这是 Autonomous AI Database 实例的标识符。名称必须是域限定名称(这支持跨租户资源访问)。
此参数的最大长度为 256 个字符。
force
:如果为 Autonomous AI 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 AI Database on Dedicated Exadata Infrastructure 实例。
您应选择最适合您环境的客户端连接方法。本指南提供了将 SQL*Plus 与获取 Azure AD OAuth2 访问令牌的不同方法连接起来的示例。所有 Oracle Database 发行版 19c 客户机都可以接受作为文件传递的令牌。JDBC-thin、Instant Client 和 ODP.net 驱动程序还通过数据库客户端 API 从应用程序接受令牌。SQL*Plus 等 Oracle Database 工具无法直接检索标记,因此必须使用 PowerShell 或 Azure CLI 等工具来检索 Azure AD OAuth2
访问标记。要检索 Azure AD 令牌,必须通过 Azure AD 应用程序注册过程注册客户端。注册客户端类似于使用应用程序注册向 Azure AD 注册 Oracle Autonomous AI 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 Client 连接至 Autonomous AI Database 的运行流程
Azure 用户、Azure AD 和 Autonomous AI Database 实例之间的连接依赖于在这些组件中传递 OAuth2
标记。
有关显示资源所有者密码身份证明 (ROPC) 流与公共客户机的使用的示例,请参阅安全指南中的操作流 for SQL*Plus Client Connection in PowerShell to Oracle Database 。
向 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 访问令牌版本。