Caso de Uso: Consultando um Cloud SQL Seguro no Autonomous Database

O Oracle Cloud SQL fornece acesso ao Servidor de Consulta em um cluster seguro do Hadoop usando uma Conexão de Banco de Dados padrão; ele não exige um cliente Kerberizado. Portanto, outro banco de dados pode acessar o Hadoop por meio do Servidor de Consulta. Por exemplo, o Autonomous Database.

Abaixo estão listadas as etapas necessárias para configurar a conectividade de ponta a ponta para o Servidor de Consulta do Autonomous Database. Em seguida, ele consultará os dados no HDFS do Autonomous Database.
Observação

Em todas as probabilidades, você provavelmente já tem as etapas 1 e 2 satisfeitas - isto é, usuários definidos no cluster do hadoop, banco de dados e dados disponíveis para consulta. Se isso ocorrer, você poderá ignorar a etapa 3 para concluir instruções sobre como obter a wallet do Servidor de Consulta e compartilhá-la com o Autonomous Database.
  1. Pré-requisitos de Configuração.
    1. Adicionar Usuários do SO e do Kerberos.
      Como pré-requisito, um Big Data Service seguro foi criado e feito o upload de dados de amostra para o HDFS e o Hive. Consulte este tutorial para obter as etapas na criação do ambiente. Além disso, um usuário foi adicionado ao cluster usando os comandos a seguir. Como raiz:
      #
      # Add an admin user to the cluster
      #
      # OS user
      dcli -C "groupadd supergroup"
      dcli -C "useradd -g supergroup -G hdfs,hadoop,hive admin" 
      # Kerberos
      kadmin.local
      kadmin.local: addprinc admin 
      kadmin.local: exit
    2. Faça download dos dados de amostra e adicione-os ao Hive.
      Adicione dados de amostra ao cluster seguindo a seção HDFS do laboratório de upload de dados.
      # get a kerberos ticket for the newly added "admin" user
      kinit admin 
      # download and run the scripts required to create sample data and hive
            tables
      wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/oraclebigdatadb/b/workshop-data/o/bds-livelabs/env.sh
      wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/oraclebigdatadb/b/workshop-data/o/bds-livelabs/download-all-hdfs-data.sh 
      
      ./download-all-hdfs-data.sh
      chmod +x *.sh
    3. Adicione um Usuário do Banco de Dados.

      Estabeleça conexão com o Servidor de Consulta e adicione um novo usuário do Banco de Dados - também chamado de "admin". Observação: O nome faz distinção entre letras maiúsculas e minúsculas. Se o nome for minúsculo quando adicionado como usuário do SO, o usuário do banco de dados também deverá ser minúsculo. Em seguida, sincronize os metadados do banco de dados hive com o Servidor de Consulta:

      # Add a database user
      # connect as sysdba to the query server
      # Notice that the database username is lowercase in order to match the OS and kerberos user
      sudo su - oracle
      sqlplus / as sysdba
      SQL> alter session set container=bdsqlusr;
      Session altered.
      SQL> exec dbms_bdsqs_admin.add_database_users('"admin"');
      SQL> alter user "admin" identified by "ComplexPassword1234%" account unlock;
    4. Certifique-se de que o Servidor de Consulta tenha sido sincronizado com o Hive executando uma sincronização no Cloudera Manager.O menu Ações do Cloudera sincroniza o banco de dados hive

  2. Abra a porta 1521 para acessar o Servidor de Consulta.
    1. Na sub-rede usada pelo Big Data Service, certifique-se de que uma regra de entrada seja definida para a porta 1521. Abra o menu de navegação e clique em Rede. Em seguida, clique em Redes Virtuais na Nuvem.
    2. Selecione a rede.
    3. Clique em Detalhes da Lista de Segurança.
  3. Disponibilize a Oracle wallet no Servidor de Consulta no Autonomous Database para ativar a criptografia TLS.

    A conexão entre o Autonomous Database e o Servidor de Consulta usa criptografia TLS. A wallet do Servidor de Consulta deve ser compartilhada com a instância do Autonomous Database para proteger a conexão:

    Um diagrama que exibe um Servidor de Consulta com uma seta com label, wallet de upload em direção a um bucket do Object Storage. Há outra seta do bucket do Object Storage com label, wallet de download indo em direção a um banco de dados autônomo.

    Para fazer isso, copie a wallet do Servidor de Consulta usada para criptografar os dados em um bucket no Oracle Object Storage e, em seguida, copie essa wallet desse bucket para o Autonomous Database.

    1. Faça upload da wallet do Servidor de Consulta para um bucket do Armazenamento de Objetos.
    2. Crie uma credencial para acessar o armazenamento de objetos. Após a criação da credencial, o bucket é consultado usando o Autonomous Database. Consulte CREATE_CREDENTIAL Procedimento.
    3. Crie um diretório no Autonomous Database para armazenar a wallet e fazer download da wallet para esse diretório.

      Exiba o conteúdo dos arquivos no diretório local.

      -- create a directory for storing the wallet
      create directory QS_WALLET_DIR as 'qs_wallet_dir';
      -- download the wallet from the object store
      BEGIN
      DBMS_CLOUD.GET_OBJECT(
      credential_name => 'OBJECT_STORE_CRED',
      object_uri => 'wallet_object_storage_uri',
      directory_name => 'QS_WALLET_DIR',
      file_name => 'cwallet.sso');
      END;
      /
      show errors;
      -- verify that the wallet was downloaded succesfully
      SELECT * FROM DBMS_CLOUD.LIST_FILES('QS_WALLET_DIR');

      Use o SQL Developer para exibir a wallet no sistema de arquivos local do Autonomous Database.

  4. Use DBMS_CLOUD.CREATE_CREDENTIAL para especificar o usuário que estabelece conexão com o Servidor de Consulta.
    1. Crie a credencial que captura a identidade do usuário do banco de dados.

      A identidade do usuário do banco de dados é necessária para a conexão com o servidor de consulta. Como o nome de usuário faz distinção entre maiúsculas e minúsculas, neste exemplo, "admin" está entre aspas duplas para garantir que fique minúsculo.

      -- create credential
      -- NOTE: The username must be capitalized.
      BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
      credential_name => 'QS_CRED',
      username => '"admin"',
      password => 'ComplexPassword1234%');
      END;
      /-- verify that the credential exists
      SELECT * FROM ALL_CREDENTIALS WHERE CREDENTIAL_NAME='QS_CRED'; 
  5. Use DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK para criar a conexão.
    Configure a conexão do Autonomous Database com o Servidor de Consulta.
    1. Crie o link de Banco de Dados que utiliza a credencial.

      O nome do serviço bdsqlusr e o nome distinto SSL são encontrados no nó do Servidor de Consulta em /opt/oracle/bigdatasql/bdsqs/wallets/client/tnsnames.ora.

      [oracle@mgadwqs0 ~]$ cat /opt/oracle/bigdatasql/bdsqs/wallets/client/tnsnames.ora
      # tnsnames.ora Network Configuration File: /opt/oracle/bigdatasql/bdsqs/edgedb/product/199000/network/admin/tnsnames.ora
      # Generated by Oracle configuration tools. 
      LISTENER_BDSQL =
      (ADDRESS = (PROTOCOL=TCPS)(HOST = zmdbimagebuild-2547-mn0.subnetcustompub.bdsdevclus01iad.oraclevcn.com)(PORT = 1521))  
      BDSQL =
      (DESCRIPTION =
      (ADDRESS =(PROTOCOL=TCPS)(HOST = zmdbimagebuild-2547-mn0.subnetcustompub.bdsdevclus01iad.oraclevcn.com)(PORT = 1521))
      (SECURITY=(SSL_SERVER_CERT_DN="CN=mgadwqs0.sub12071934190.bdsadw.oraclevcn.com"))
      (CONNECT_DATA =(SERVER = DEDICATED)
      (SERVICE_NAME = bdsql.zmdbimagebuild-2547-mn0.subnetcustompub.bdsdevclus01iad.oraclevcn.com)
      )
      ) 
      bdsqlusr=(DESCRIPTION=
      (ADDRESS=(PROTOCOL=TCPS)(HOST=mgadwqs0.sub12071934190.bdsadw.oraclevcn.com)(PORT=1521))
      (SECURITY=(SSL_SERVER_CERT_DN="CN=mgadwqs0.sub12071934190.bdsadw.oraclevcn.com"))
      (CONNECT_DATA=(SERVICE_NAME=bdsqlusr.mgadwqs0.sub12071934190.bdsadw.oraclevcn.com)
      )
      )
    2. Use as informações da entrada bdsqlusr para criar o link de banco de dados.
      -- create database link
      BEGIN
      DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
      db_link_name => 'QUERY_SERVER',
      hostname => 'query_server_hostname',
      port => 1521,
      service_name => 'bdsqlusr.mgadwqs0.sub12071934190.bdsadw.oraclevcn.com',
      ssl_server_cert_dn => 'CN=mgadwqs0.sub12071934190.bdsadw.oraclevcn.com',
      credential_name => 'QS_CRED',
      directory_name => 'QS_WALLET_DIR');
      END;
      / 
      -- select the current user on the Query Server using the database link
      select user from dual@query_server 
      USER 
      -----
      ADMIN
      Elapsed: 00:00:00.0181 
      rows selected.
    O link do banco de dados foi bem-sucedido. O resultado da consulta mostra o usuário do banco de dados atual. Você pôde estabelecer conexão com um Servidor de Consulta em um cluster kerberizado sem um cliente Kerberos.
  6. Executar a consulta.

    Agora você pode consultar qualquer uma das tabelas disponíveis pelo Servidor de Consulta. O exemplo a seguir consulta os dados meteorológicos provenientes do Hive:

    -- Query Weather data on Hive
    select * from weather_ext@query_server where rownum < 10;
    
    LOCATION                   REPORTED_DATE WIND_AVG PRECIPITATION SNOW SNOWDEPTH TEMP_MAX TEMP_MIN
    -------------------------  ------------- -------- ------------- ---- --------- --------  --------
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-01          13          0.07     0         0       49       34
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-02           7             0     0         0       39       33
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-03          10             0     0         0       54       38
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-04           8             0     0         0       50       32
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-05          10          0.57     0         0       44       38
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-06          13             0     0         0       43       26
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-07           9             0     0         0       31       22
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-08           2          0.13     0         0       39       30
    NEWARK-NJ-LIBERTY-AIRPORT 2019-01-09          16          0.04     0         0       41       30  
    
    Elapsed: 00:00:01.0989 rows selected.