在专用 Exadata 基础结构上将 Microsoft Active Directory 与自治 AI 数据库结合使用

您可以在专用 Exadata 基础结构上配置 Autonomous AI Database,以对 Microsoft Active Directory 用户进行验证和授权。此配置允许 Active Directory 用户使用其 Active Directory 身份证明访问自治 AI 数据库。

注:有关将 Azure Active Directory 与 Autonomous AI Database 一起使用的信息,请参阅将 Azure Active Directory (Azure AD) 与 Autonomous AI Database 一起使用。CMU 选项支持 Microsoft Active Directory 服务器,但不支持 Azure Active Directory 服务。

自治 AI 数据库与集中管理用户 (Centrally Managed Users,CMU) 的集成提供了与 Microsoft Active Directory 的集成。具有 Active Directory 的 CMU 通过将 Oracle 数据库全局用户和全局角色映射到 Microsoft Active Directory 用户和组来工作。

使用自治 AI 数据库上的 Microsoft Active Directory 配置 CMU 的先决条件

下面是配置从自治 AI 数据库到 Active Directory 的连接所需的先决条件:

在自治 AI 数据库上使用 Microsoft Active Directory 配置 CMU

要为 CMU 配置自治 AI 数据库以连接到 Active Directory 服务器,请执行以下操作:

  1. 以 ADMIN 用户身份连接到自治 AI 数据库。

  2. 验证您的数据库是否已启用其他外部验证方案,并禁用该方案。

    注:您可以继续在 Kerberos 上进行 CMU-AD 配置,以便为 Microsoft Active Directory 用户提供 CMU-AD Kerberos 验证。

  3. 将 CMU 配置文件(包括数据库 wallet 文件、cwallet.sso 和 CMU 配置文件 dsi.ora)上载到对象存储。此步骤取决于您使用的对象存储。

    dsi.ora 配置文件包含用于查找 Active Directory 服务器的信息。

    如果您使用的是 Oracle Cloud Infrastructure 对象存储,请参阅将数据放置到对象存储以了解有关上载文件的详细信息。

  4. 在自治 AI 数据库上,创建新目录对象或选择现有目录对象。这是用于存储 wallet 和用于连接到 Active Directory 的配置文件的目录:

    例如:

    CREATE OR REPLACE DIRECTORY cmu_wallet_dir AS 'cmu_wallet';

    使用以下 SQL 语句查询目录对象的文件系统目录路径:

    SELECT DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE
       DIRECTORY_NAME='directory_object_name';

    例如:

    SELECT DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE
       DIRECTORY_NAME='CMU_WALLET_DIR';
    DIRECTORY_PATH
    
    ----------------------------------------------------------------------------
    /file_system_directory_path_example/cmu_wallet

    注:查询中的目录对象名称必须大写,因为在创建目录对象时未保留其大小写。

    如果要保留目录对象名称的大小写,则需要将其名称包含在双引号中。例如:

    CREATE OR REPLACE DIRECTORY "CMU_wallet_dir" AS 'cmu_wallet';
  5. 使用 DBMS_CLOUD.GET_OBJECT 将 CMU 配置文件(数据库 wallet cwallet.sso 和 dsi.ora)从对象存储复制到在上面的步骤 4 中创建或选择的目录。

    例如,使用 DBMS_CLOUD.GET_OBJECT 将文件从对象存储复制到 CMU_WALLET_DIR,如下所示:

    BEGIN
       DBMS_CLOUD.GET_OBJECT(
          credential_name => 'DEF_CRED_NAME',
          object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
          directory_name => 'CMU_WALLET_DIR');
       DBMS_CLOUD.GET_OBJECT(
          credential_name => 'DEF_CRED_NAME',
          object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/dsi.ora',
          directory_name => 'CMU_WALLET_DIR');
    END;
    /

    在此示例中,*namespace-string* 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间。

    有关详细信息,请参阅 GET_OBJECT 过程。

    使用下面的 SQL 语句查询复制到目录的文件。

    SELECT * FROM DBMS_CLOUD.LIST_FILES('directory_object_name');

    例如:

    SELECT * FROM DBMS_CLOUD.LIST_FILES('CMU_WALLET_DIR');

    请注意,此查询中的目录对象名称必须大写,因为在创建目录对象时未保留其大小写。

  6. 使用 DBMS_CLOUD_ADMIN 程序包在自治 AI 数据库中启用 CMU-AD。

    注:将以下示例中的目录名称替换为为您的环境选择的目录名称。在运行此命令之前,请确保您以 ADMIN 用户身份登录。

    BEGIN
      DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
        type     => 'CMU',
        params   => JSON_OBJECT('directory_name' value 'CMU_WALLET_DIR')
      );
    END;
    /
  7. 要维护安全性,请从对象存储中删除 CMU 配置文件,包括数据库 wallet cwallet.sso 和 CMU 配置文件 dsi.ora。可以使用本地对象存储方法删除这些文件,或使用 DBMS_CLOUD.DELETE_OBJECT 从对象存储中删除文件。

    有关 DBMS_CLOUD.DELETE_OBJECT 的更多信息,请参见 DELETE_OBJECT Procedure 。

注:有关禁用从自治 AI 数据库到 Active Directory 的访问的说明,请参见 Disable Active Directory Access on Autonomous AI Database 。

有关详细信息,请参阅 Oracle Database 19c Security Guide 或 Oracle Database 26ai Security Guide 中的 Configuring Centrally Managed Users with Microsoft Active Directory 。

在 Exadata Cloud@Customer 上使用 Microsoft Active Directory 配置 CMU

适用于:适用 仅限 Exadata Cloud@Customer

要在 Exadata Cloud@Customer for CMU 上配置自治 AI 数据库以连接到 Active Directory 服务器,而不使用 Oracle 对象存储服务:

  1. 以 ADMIN 用户身份连接到自治 AI 数据库。

  2. 验证您的数据库是否已启用其他外部验证方案,并使用以下 SQL 命令将其禁用。

    BEGIN
      DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION;
    END;
    /
  3. CMU-AD 需要自治 Exadata VM 集群 (AVMC) 上本地文件系统上的 Active Directory 连接 wallet cwallet.sso 和 dsi.ora 文件。您可以通过在 Oracle Cloud Infrastructure 的 Oracle 对象存储服务中托管这些文件,然后使用 DBMS_CLOUD 程序包在本地复制这些文件来实现此目的。您可以在 Configure CMU with Microsoft Active Directory on Autonomous AI Database 中找到此过程以及详细的步骤和示例。

  4. 如果无法在云存储中托管 cwallet.sso 和 dsi.ora,则可以使用数据中心中的网络文件系统 (Network File System,NFS) 共享来托管这些文件,然后将其移动到数据库文件系统 (Database File System,DBFS) 下的数据库目录。为此,必须首先将本地可用的 NFS 共享附加到 Autonomous AI Database 目录对象,如下所示:

    1. 使用 SQL 客户机中的以下 SQL 命令在自治 AI 数据库实例中创建数据库目录:

      create or replace directory TMPFSSDIR as 'tmpfssdir';
    2. 使用自治 AI 数据库中提供的 DBMS_CLOUD_ADMIN 软件包将 NFS 共享挂载到此目录。

      提示:您可能需要与网络或存储管理员合作,才能使 NFS 共享可用。

      BEGIN
        DBMS_CLOUD_ADMIN.attach_file_system(
          file_system_name => <some_name_you_assign>,
          file_system_location => <your_nfs_fs_path>,
          directory_name => <tmpfssdir_created_above>,
          description => 'Any_desc_you_like_to_give'
        );
      END

      例如:

      BEGIN
        DBMS_CLOUD_ADMIN.attach_file_system(
          file_system_name => 'AD-FSS',
          file_system_location => acme.com:/nfs/mount1',
          directory_name => 'TMPFSSDIR',
          description => 'nfs to host AD files'
        );
      END;
  5. 要避免对 CMU 可用的 cwallet.sso 和 dsi.ora 文件的 NFS 共享产生依赖性,请使用数据库目录映射将其移至本地文件系统文件夹。由于自治 AI 数据库限制对本地文件系统的访问,因此请使用 utl_file 创建复制过程,如下所示:

    1. 使用 SQL 客户机中的以下 SQL 命令在自治 AI 数据库实例中创建数据库目录:

      CREATE OR REPLACE DIRECTORY cmu_wallet_dir AS 'cmu_wallet';
    2. 使用以下 SQL 命令检查上面创建的目录的目录路径:

      SELECT DIRECTORY_PATH
      FROM DBA_DIRECTORIES
      WHERE DIRECTORY_NAME ='CMU_WALLET_DIR';

      注:目录对象名称在查询中必须以大写形式显示,因为在创建目录对象时未保留其大小写。

    3. 使用 UTL_FILE 实用程序将 dsi.ora 和 cwallet.sso 从 NFS 目录复制到本地 CMU Wallet 目录。

      例如:

      创建一个名为 copyfile 的存储过程,如下所示:

      CREATE OR REPLACE PROCEDURE copyfile(
        in_loc_dir IN VARCHAR2,
        in_filename IN VARCHAR2,
        out_loc_dir IN VARCHAR2,
        out_filename IN VARCHAR2
      )
      IS
        in_file UTL_FILE.file_type;
        out_file UTL_FILE.file_type;
        buffer_size CONSTANT INTEGER := 32767;
        buffer RAW (32767);
        buffer_length INTEGER;
      BEGIN
        in_file := UTL_FILE.fopen (in_loc_dir, in_filename, 'rb', buffer_size);
        out_file := UTL_FILE.fopen (out_loc_dir, out_filename, 'wb', buffer_size);
        UTL_FILE.get_raw (in_file, buffer, buffer_size);
        buffer_length := UTL_RAW.LENGTH (buffer);
      
        WHILE buffer_length > 0
        LOOP
          UTL_FILE.put_raw (out_file, buffer, TRUE);
      
          IF buffer_length = buffer_size
            THEN
              UTL_FILE.get_raw (in_file, buffer, buffer_size);
              buffer_length := UTL_RAW.LENGTH (buffer);
            ELSE
              buffer_length := 0;
            END IF;
        END LOOP;
      
        UTL_FILE.fclose (in_file);
        UTL_FILE.fclose (out_file);
      EXCEPTION
        WHEN NO_DATA_FOUND
        THEN
          UTL_FILE.fclose (in_file);
          UTL_FILE.fclose (out_file);
      END;
      /

      编译 copyfile 存储过程。成功编译后,每运行一次 copyfile 过程,将 dsi.ora 和 cwallet.sso 从 NFS 目录复制到本地 CMU Wallet 目录,如下所示:

      EXEC copyfile('TMPFSSDIR','dsi.ora','CMU_WALLET_DIR','dsi.ora');
      EXEC copyfile('TMPFSSDIR','cwallet.sso','CMU_WALLET_DIR','cwallet.sso');
    4. 运行以下 SQL 查询以验证文件是否已成功复制到本地 CMU Wallet 目录。

      SELECT * FROM DBMS_CLOUD.LIST_FILES('CMU_WALLET_DIR');
  6. 使用以下命令,分离 NFS 共享,因为在将文件复制到本地目录后,不需要用于 CMU-AD。

    exec DBMS_CLOUD_ADMIN.detach_file_system(file_system_name => <FILE_SYSTEM_NAME>);
  7. 使用 DBMS_CLOUD_ADMIN 程序包在自治 AI 数据库中启用 CMU-AD。

    注:将以下示例中的目录名称替换为为您的环境选择的目录名称。在运行此命令之前,请确保您以 ADMIN 用户身份登录。

    BEGIN
      DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
        type     => 'CMU',
        params   => JSON_OBJECT('directory_name' value 'CMU_WALLET_DIR')
      );
    END;
    /
  8. 通过查询数据库属性 CMU_WALLET 的属性值进行验证,如下所示。

    SELECT PROPERTY_VALUE
    FROM DATABASE_PROPERTIES
    WHERE PROPERTY_NAME = 'CMU_WALLET';

    例如:

    SELECT PROPERTY_VALUE
    FROM DATABASE_PROPERTIES
    WHERE PROPERTY_NAME='CMU_WALLET';
    PROPERTY_VALUE
    
    --------------
    CMU_WALLET_DIR

您现在已将 CMU-AD 配置为通过 Microsoft Active Directory 将外部验证与 Exadata Cloud@Customer 上的自治 AI 数据库结合使用。

在自治 AI 数据库上添加 Microsoft Active Directory 角色

要添加 Active Directory 角色,请使用 CREATE ROLE 或 ALTER ROLE 语句将数据库全局角色映射到 Active Directory 组(并包括 IDENTIFIED GLOBALLY AS 子句)。

要在自治 AI 数据库上为 Active Directory 组添加全局角色,请执行以下操作:

  1. 以 ADMIN 用户身份登录到配置为使用 Active Directory 的数据库(ADMIN 用户具有这些步骤所需的 CREATE ROLE 和 ALTER ROLE 系统权限)。

  2. 使用 CREATE ROLE 或 ALTER ROLE 语句为自治 AI 数据库角色设置数据库授权。包括 IDENTIFIED GLOBALLY AS 子句并指定 Active Directory 组的 DN。

    使用以下语法将目录用户组映射到数据库全局角色:

    CREATE ROLE global_role IDENTIFIED GLOBALLY AS
         'DN_of_an_AD_GROUP_of_WHICH_the_AD_USER_IS_a_MEMBER';

    例如:

    CREATE ROLE widget_sales_role IDENTIFIED GLOBALLY AS
         'CN=widget_sales_group,OU=sales,DC=production,DC=example,DC=com';

    在此示例中,widget_sales_group 的所有成员在登录到数据库时都获得了数据库角色 widget_sales_role 的授权。

  3. 使用 GRANT 语句向全局角色授予所需的特权或其他角色。

    例如:

    GRANT CREATE SESSION TO WIDGET_SALES_ROLE;
    GRANT DWROLE TO WIDGET_SALES_ROLE;

    DWROLE 是定义了公用权限的预定义角色。有关为自治 AI 数据库用户设置公用权限的信息,请参阅管理数据库用户权限。

  4. 如果要使现有数据库角色与 Active Directory 组关联,则使用 ALTER ROLE 语句更改现有数据库角色,以将该角色映射到 Active Directory 组。

    使用以下语法更改现有数据库角色以将其映射到 Active Directory 组:

    ALTER ROLE existing_database_role
       IDENTIFIED GLOBALLY AS 'DN_of_an_AD_GROUP_of_WHICH_the_AD_USER_IS_a_MEMBER';
  5. 如果要为其他 Active Directory 组创建其他全局角色映射,请针对每个 Active Directory 组执行以下步骤。

有关使用 Microsoft Active Directory 配置角色的更多信息,请参阅 Oracle Database 19c Security Guide 或 Oracle Database 26ai Security Guide 中的 Configuring Authorization for Centrally Managed Users 。

在自治 AI 数据库上添加 Microsoft Active Directory 用户

要添加 Active Directory 用户以访问自治 AI 数据库,请使用 CREATE USER 或 ALTER USER 语句(带有 IDENTIFIED GLOBALLY AS 子句)将数据库全局用户映射到 Active Directory 组或用户。

通过将 Microsoft Active Directory 用户和组直接映射到 Oracle 数据库全局用户和全局角色,可以将 Autonomous AI Database 与 Active Directory 集成。

要为自治 AI 数据库上的 Active Directory 组或用户添加全局用户,请执行以下操作:

  1. 以 ADMIN 用户身份登录到配置为使用 Active Directory 的数据库(ADMIN 用户具有这些步骤所需的 CREATE USER 和 ALTER USER 系统权限)。

  2. 使用 CREATE USER 或 ALTER USER 语句为自治 AI 数据库用户设置数据库授权,并包括 IDENTIFIED GLOBALLY AS 子句,以指定 Active Directory 用户或组的 DN。

    使用以下语法将目录用户映射到数据库全局用户:

    CREATE USER global_user IDENTIFIED GLOBALLY AS 'DN_of_an_AD_USER';

    使用以下语法将目录组映射到数据库全局用户:

    CREATE USER global_user IDENTIFIED GLOBALLY AS
        'DN_of_an_AD_GROUP_of_WHICH_the_AD_USER_IS_a_MEMBER';

    例如,要将 production.example.com 域的 sales 组织单元中名为 widget_sales_group 的目录组映射到名为 WIDGET_SALES 的共享数据库全局用户:

    CREATE USER widget_sales IDENTIFIED GLOBALLY AS
         'CN=widget_sales_group,OU=sales,DC=production,DC=example,DC=com';

    这将创建共享全局用户映射。全局用户 widget_sales 的映射对 Active Directory 组中的所有用户都有效。因此,widget_sales_group 中的任何人都可以使用其 Active Directory 凭证(通过 widget_sales 全局用户的共享映射)登录到数据库。

  3. 如果希望 Active Directory 用户使用现有数据库用户、拥有其方案并拥有其现有数据,则使用 ALTER USER 更改现有数据库用户以将用户映射到 Active Directory 组或用户。

    • 使用以下语法更改现有数据库用户以将其映射到 Active Directory 用户:

      ALTER USER existing_database_user IDENTIFIED GLOBALLY AS 'DN_of_an_AD_USER';
    • 使用以下语法更改现有数据库用户以将其映射到 Active Directory 组:

      ALTER USER existing_database_user
           IDENTIFIED GLOBALLY AS 'DN_of_an_AD_GROUP_of_WHICH_the_AD_USER_IS_a_MEMBER';
  4. 如果要为其他 Active Directory 组或用户创建其他全局用户映射,请针对每个 Active Directory 组或用户执行以下步骤。

有关使用 Microsoft Active Directory 配置角色的更多信息,请参阅 Oracle Database 19c Security Guide 或 Oracle Database 26ai Security Guide 中的 Configuring Authorization for Centrally Managed Users 。

使用 Active Directory 用户身份证明连接到自治 AI 数据库

ADMIN 用户完成 CMU Active Directory 配置步骤并创建全局角色和全局用户后,用户使用其 Active Directory 用户名和密码登录到自治 AI 数据库。

注:请勿使用全局用户名登录。全局用户名没有密码,与全局用户名连接将不成功。必须在自治 AI 数据库中具有全局用户映射才能登录到数据库。无法仅使用全局角色映射登录到数据库。

要使用 Active Directory 用户名和密码登录到自治 AI 数据库,请按如下方式连接:

CONNECT "AD_DOMAIN\AD_USERNAME"/AD_USER_PASSWORD@TNS_ALIAS_OF_THE_AUTONOMOUS_DATABASE;

例如:

CONNECT "production\pfitch"/password@adbname_medium;

当 Active Directory 域与用户名一起包含时,需要包含双引号,如以下示例所示:"production\pfitch"。

在此示例中,域 production 中的 Active Directory 用户名为 pfitch。Active Directory 用户是 widget_sales_group 组的成员,该组由其 DN 'CN=widget_sales_group,OU=sales,DC=production,DC=example,DC=com' 标识。

在自治 AI 数据库上使用 Active Directory 配置 CMU 并设置具有全局角色和全局用户的 Active Directory 授权后,您可以使用关于连接到专用自治 AI 数据库中所述的任何连接方法连接到自治 AI 数据库。连接时,如果要使用 Active Directory 用户,则使用 Active Directory 用户凭证。例如,以这种形式提供用户名 "AD_DOMAIN\AD_USERNAME"(必须包括双引号),然后将 AD_USER_PASSWORD 用于密码。

使用自治 AI 数据库验证 Active Directory 用户连接信息

用户使用其 Active Directory 用户名和密码登录到自治 AI 数据库时,可以验证和审计用户活动。

例如,当用户 pfitch 登录时:

CONNECT "production\pfitch"/password@exampleadb_medium;

Active Directory 用户的登录用户名 (samAccountName) 为 pfitch,widget_sales_group 是 Active Directory 组名称,widget_sales 是自治 AI 数据库全局用户。

pfitch 登录到数据库后,命令 SHOW USER 显示全局用户名:

SHOW USER;
USER is "WIDGET_SALES"

以下命令显示 Active Directory 用户的 DN(唯一判别名):

SELECT SYS_CONTEXT('USERENV', 'ENTERPRISE_IDENTITY') FROM DUAL;

例如,您可以验证此集中管理用户的企业身份:

SQL> SELECT SYS_CONTEXT('USERENV', 'ENTERPRISE_IDENTITY') FROM DUAL;
SYS_CONTEXT('USERENV','ENTERPRISE_IDENTITY')
----------------------------------------------------------------------
cn=Peter Fitch,ou=sales,dc=production,dc=examplecorp,dc=com

以下命令显示 "AD_DOMAIN\AD_USERNAME":

SELECT SYS_CONTEXT('USERENV', 'AUTHENTICATED_IDENTITY') FROM DUAL;

例如,当用户登录到数据库时,将捕获并审计通过 Active Directory 验证的用户身份:

SQL> SELECT SYS_CONTEXT('USERENV', 'AUTHENTICATED_IDENTITY') FROM DUAL;
SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY')
----------------------------------------------------------------------
production\pfitch

有关详细信息,请参阅 Oracle Database 19c Security Guide 中的 Verifying the Centrally Managed User Logon Information 或 Oracle Database 26ai Security Guide 。

删除自治 AI 数据库上的 Active Directory 用户和角色

要从自治 AI 数据库中删除 Active Directory 用户和角色,请使用标准数据库命令。这不会删除从已删除的数据库用户或角色映射的相关 Active Directory 用户或组。

要从自治 AI 数据库中删除用户或角色,请执行以下操作:

  1. 登录到配置为将 Active Directory 用作已授予 DROP USER 或 DROP ROLE 系统权限的用户的数据库。

  2. 使用 DROP USER 或 DROP ROLE 语句删除映射到 Active Directory 组或用户的全局用户或全局角色。

    有关更多信息,请参见 Remove Database Users 。

在自治 AI 数据库上禁用 Active Directory 访问

介绍从自治 AI 数据库中删除 CMU 配置的步骤(以及禁用从自治 AI 数据库到 Active Directory 的 LDAP 访问)。

将自治 AI 数据库实例配置为访问 CMU Active Directory 之后,可以按如下方式禁用访问:

  1. 以 ADMIN 用户身份连接到自治 AI 数据库。

  2. 使用 DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION 禁用 CMU 验证。

    注:要运行此过程,您必须以 ADMIN 用户身份登录,或者对 DBMS_CLOUD_ADMIN 具有 EXECUTE 权限。

    例如:

    BEGIN
      DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION;
    END;
    /

    这将禁用自治 AI 数据库实例上的 CMU 验证。

有关更多信息,请参见 DISABLE_EXTERNAL_AUTHENTICATION Procedure 。

自治 AI 数据库上 Microsoft Active Directory 的限制

以下限制适用于自治 AI 数据库上具有 Active Directory 的 CMU: