Todos os produtos
Search
Central de documentação

MaxCompute:Funções de criptografia

Última atualização: Sep 15, 2026

O MaxCompute SQL oferece funções de criptografia e descriptografia para proteger seus dados. Este tópico detalha a sintaxe, os parâmetros e exemplos das funções de criptografia.

Criptografia de dados no MaxCompute

  • Criptografia de chave única: Permite gerar uma única chave para criptografar ou descriptografar aleatoriamente colunas específicas. Você é responsável por armazenar a chave gerada.

    单一密钥加密.jpg

    A tabela a seguir descreve as funções para criptografia e descriptografia de chave única no MaxCompute SQL.

    Função

    Descrição

    SYM_DECRYPT

    Descriptografa uma coluna especificada e criptografada aleatoriamente, retornando o texto simples como tipo BINARY.

    SYM_ENCRYPT

    Criptografa aleatoriamente uma coluna especificada e retorna o texto cifrado como tipo BINARY.

  • Criptografia de múltiplas chaves: Um keyset é um objeto de gerenciamento de chaves no MaxCompute que pode conter uma ou mais chaves. É possível adicionar chaves manualmente a um keyset, realizar rotação de chaves e visualizar as chaves originais.

    多密钥加密.jpg

    A tabela a seguir descreve as funções para criptografia e descriptografia de múltiplas chaves no MaxCompute SQL.

    Função

    Descrição

    NEW_KEYSET

    Cria um keyset com base em um tipo de algoritmo especificado.

    ADD_KEY_TO_KEYSET

    Adiciona uma nova chave a um keyset e a define como chave mestra.

    KEYSET_TO_JSON

    Converte um keyset do tipo BINARY para um formato JSON legível, permitindo a visualização de seus detalhes.

    KEYSET_FROM_JSON

    Converte uma string de keyset do formato JSON para o tipo BINARY.

    ROTATE_KEYSET

    Gera uma nova chave e a define como chave mestra.

  • Criptografia de múltiplas chaves com integração KMS: O MaxCompute se integra ao KMS para criptografia de dados. O MaxCompute gera um keyset básico e o criptografa com uma chave mestra do cliente (CMK) do KMS para criar um wrapped keyset. Você é responsável por armazenar esse wrapped keyset. Para descriptografar dados, é necessário fornecer o wrapped keyset. O MaxCompute usa então a CMK do KMS para descriptografar o wrapped keyset no keyset básico, que é posteriormente utilizado para descriptografar os dados.

    keyset.jpg

    A tabela a seguir descreve as funções para criptografia e descriptografia de múltiplas chaves integradas ao KMS no MaxCompute SQL.

    Função

    Descrição

    NEW_WRAPPED_KEYSET

    Cria um novo wrapped keyset. Esta operação requer uma função (especificada por role_arn) que tenha permissão para usar uma chave mestra do cliente (CMK) do KMS. Opcionalmente, especifique uma cadeia de funções (especificada por role_chain) para permitir que outras contas Alibaba Cloud descriptografem o keyset.

    REWRAP_KEYSET

    Recriptografa um wrapped keyset usando uma chave KMS especificada.

    ROTATE_WRAPPED_KEYSET

    Descriptografa um wrapped keyset existente, executa a rotação de suas chaves internas e o recriptografa com a chave KMS original.

    USE_WRAPPED_KEYSET

    Descriptografa um wrapped keyset em um keyset básico para uso como parâmetro em funções de criptografia ou descriptografia. Use esta função também para visualizar os metadados do wrapped keyset para fins de manutenção.

    ENHANCED_SYM_ENCRYPT

    Criptografa dados usando um keyset especificado.

    ENHANCED_SYM_DECRYPT

    Descriptografa dados usando um keyset especificado.

Observações

Após a atualização para o MaxCompute 2.0, algumas funções foram estendidas. Para usar funções que envolvem os novos tipos de dados (TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP ou BINARY), execute a seguinte instrução para ativar o novo sistema de tipos de dados:

  • No nível de sessão: Para usar os novos tipos de dados, adicione set odps.sql.type.system.odps2=true; antes da sua instrução SQL e envie-as juntas.

  • No nível de projeto: O proprietário do projeto pode configurar essa definição conforme necessário. A configuração leva de 10 a 15 minutos para entrar em vigor. Utilize o seguinte comando:

    setproject odps.sql.type.system.odps2=true;

    Para obter mais informações sobre setproject, consulte Project operations. Para observações sobre a ativação de tipos de dados no nível do projeto, consulte Data type version guide.

SYM_DECRYPT

  • Sintaxe

    binary sym_decrypt(binary <value_to_decrypt>,
                       binary <key>
                       [,string <encryption_method> ,
                        [ string <additional_authenticated_data> ]
                       ]
                      )
  • Descrição

    Descriptografa dados criptografados aleatoriamente em uma coluna de tabela especificada.

  • Parâmetros

    • value_to_decrypt: Obrigatório. Os dados a serem descriptografados, que devem ser do tipo BINARY.

    • key: Obrigatório. A chave de descriptografia. Deve ser um valor BINARY de 256 bits.

    • encryption_method: Opcional. O método de criptografia. Especifique o mesmo método usado para criptografar os dados.

    • additional_authenticated_data: Opcional. Os dados autenticados adicionais (AAD) para verificar a autenticidade e integridade dos dados. Se você forneceu AAD durante a criptografia, também deve fornecê-lo para a descriptografia.

  • Valor de retorno

    Retorna o texto simples como tipo BINARY. Se necessário, use a função CAST para converter os dados BINARY para o tipo STRING.

  • Exemplos

    Os exemplos a seguir mostram como descriptografar dados em uma tabela que foi criptografada com a função SYM_ENCRYPT.

    • Exemplo 1: Descriptografar dados criptografados com uma chave em texto simples.

      -- Decrypt the id_card_no column.
      INSERT OVERWRITE TABLE mf_user_info
      SELECT id,
             name,
             gender,
             CAST(sym_decrypt(unbase64(id_card_no),
                              CAST('b75585cf321cdcad42451690cdb7bfc4' AS BINARY)
                             ) AS STRING) AS id_card_no,
             tel
      FROM mf_user_info;
      
      -- Query the decrypted data.
      SELECT * FROM mf_user_info;
    • Exemplo 2: Descriptografar dados criptografados com uma tabela de chaves.

      -- Decrypt the id_card_no column with AAD verification.
      INSERT OVERWRITE TABLE mf_user_info
      SELECT id,
             name,
             gender,
             CAST(sym_decrypt(unbase64(id_card_no),
                              CAST('b75585cf321cdcad42451690cdb7bfc4' AS BINARY),
                              'AES-GCM-256',
                              'test'
                             ) AS STRING) AS id_card_no,
             tel
      FROM mf_user_info;
      
      -- Query the decrypted data.
      SELECT * FROM mf_user_info;

      O comando retorna o seguinte resultado:

      +------------+------+--------+------------+-------------+
      | id         | name | gender | id_card_no | tel         |
      +------------+------+--------+------------+-------------+
      | 1          | bob  | male   | 0001       | 13900001234 |
      | 2          | allen| male   | 0011       | 13900001111 |
      | 3          | kate | female | 0111       | 13900002222 |
      | 4          | annie| female | 1111       | 13900003333 |
      +------------+------+--------+------------+-------------+

SYM_ENCRYPT

  • Sintaxe

    binary sym_encrypt(string|binary <value_to_encrypt>,
                       binary <key>
                       [,string <encryption_method> ,
                          [ string <additional_authenticated_data> ]
                        ]
                      )
  • Descrição

    Criptografa uma coluna especificada usando criptografia randomizada.

  • Parâmetros

    • value_to_encrypt: Obrigatório. Os dados a serem criptografados. Apenas os tipos STRING e BINARY são suportados.

    • key: Obrigatório. A chave de criptografia. Deve ter 256 bits e ser do tipo BINARY.

    • encryption_method: Opcional. O método de criptografia. O único algoritmo suportado é AES-GCM-256, que é o padrão.

    • additional_authenticated_data: Opcional. Os dados autenticados adicionais (AAD) usados para verificar a autenticidade e integridade dos dados. Este parâmetro é suportado apenas por algoritmos de Criptografia Autenticada com Dados Associados (AEAD), como AES-GCM.

  • Valor de retorno

    Retorna o texto cifrado como um valor BINARY.

    • O valor de retorno contém o vetor de inicialização (IV), o texto cifrado e a tag AEAD, nessa ordem.

    • A função é não determinística, ou seja, retorna um texto cifrado diferente para cada criptografia, mesmo com o mesmo texto simples e chave.

  • Dados de amostra

    -- Create the table.
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    
    -- Insert sample data.
    insert overwrite table mf_user_info values(1,"bob","male","0001","13900001234"),
                                               (2,"allen","male","0011","13900001111"),
                                               (3,"kate","female","0111","13900002222"),
                                               (4,"annie","female","1111","13900003333");
    
    -- Query the table.
    select * from mf_user_info;
  • Exemplo 1: Criptografar dados usando uma chave em texto simples

    Criptografe colunas na tabela mf_user_info com base nos dados de amostra. Execute o seguinte comando:

    • Criptografar com AES-GCM-256 (sem AAD)

      -- Encrypt the id_card_no column.
      insert overwrite table mf_user_info
      select id,
             name,
             gender,
             base64(sym_encrypt(id_card_no,
                      cast('b75585cf321cdcad42451690cdb7bfc4' as binary)
                    )) as id_card_no,
             tel
      from mf_user_info;
      
      select * from mf_user_info;

      Resultado:

      +------------+------+--------+------------+-----+
      | id         | name | gender | id_card_no | tel |
      +------------+------+--------+------------+-----+
      | 1          | bob  | male   | frgJZAEAQMeEuHqpS8lK9VxQhgPYpZ317V+oUla/xEc= | 13900001234|
      | 2          | allen| male   | frgJZAIAQMeEuHqpLeXQfETsFSLJxBwHhPx6tpzWUg4= | 13900001111|
      | 3          | kate | female | frgJZAMAQMeEuHqpdphXAU6iWelWenlDnVy+R0HMvAY= | 13900002222|
      | 4          | annie| female | frgJZAQAQMeEuHqpR5c8bj21dYCeM0C25bLRZIrP71c= | 13900003333|
      +------------+------+--------+------------+-----+
    • Criptografar com AES-GCM-256 e AAD

      Transmita um valor AAD para vincular o texto cifrado a um contexto específico. A descriptografia falhará se o AAD não corresponder.

      -- Encrypt the id_card_no column with AAD.
      insert overwrite table mf_user_info
      select id,
             name,
             gender,
             base64(sym_encrypt(id_card_no,
                      cast('b75585cf321cdcad42451690cdb7bfc4' as binary),
                      'AES-GCM-256',
                      'test'
                    )) as id_card_no,
             tel
      from mf_user_info;
      
      select * from mf_user_info;

      Resultado:

      +------------+------+--------+------------+-----+
      | id         | name | gender | id_card_no | tel |
      +------------+------+--------+------------+-----+
      | 1          | bob  | male   | gJ0QaAEAoGGWVw90H/zETg... | 13900001234|
      | 2          | allen| male   | gJ0QaAIAoGGWVw90TpNFC0... | 13900001111|
      | 3          | kate | female | gJ0QaAMAoGGWVw90KaQ8Vm... | 13900002222|
      | 4          | annie| female | gJ0QaAQAoGGWVw90nYCAS1... | 13900003333|
      +------------+------+--------+------------+-----+
  • Exemplo 2: Criptografar dados usando uma tabela de chaves

    Para evitar passar chaves em texto simples no SQL, armazene as chaves em uma tabela do MaxCompute e faça um join com a tabela alvo no momento da criptografia.

    Observações sobre gerenciamento de chaves:

    • A criação e o gerenciamento das chaves são de sua responsabilidade. O MaxCompute não armazena chaves nem qualquer mapeamento entre chaves e textos cifrados. Se uma chave for perdida, os dados criptografados não poderão ser recuperados.

    • Para prevenir a exposição de chaves, não conceda acesso direto à tabela de chaves. Em vez disso, crie uma view segura que chame a função de descriptografia — os usuários acessam os dados através da view sem nunca ver a chave em texto simples.

    • Se os dados a serem criptografados forem do tipo BINARY, execute set odps.sql.type.system.odps2=true; para ativar a edição de tipos de dados do MaxCompute V2.0.

    -- Create a key table.
    create table mf_id_key(id bigint, key binary);
    
    -- Insert a key.
    insert overwrite table mf_id_key
      values (1, cast('b75585cf321cdcad42451690cdb7bfc4' as binary));
    
    -- Verify the key table.
    select * from mf_id_key;

    Resultado:

    +------------+----------------------------------+
    | id         | key                              |
    +------------+----------------------------------+
    | 1          | b75585cf321cdcad42451690cdb7bfc4 |
    +------------+----------------------------------+
    -- Encrypt the id_card_no column using the key table.
    insert overwrite table mf_user_info
    select /*+mapjoin(b)*/
          a.id,
          a.name,
          a.gender,
          base64(sym_encrypt(a.id_card_no, b.key)) as id_card_no,
          a.tel
    from mf_user_info as a join mf_id_key as b on a.id >= b.id;
    
    -- Query the encrypted result.
    select * from mf_user_info;

    Resultado:

    +------------+------+--------+------------+-----+
    | id         | name | gender | id_card_no | tel |
    +------------+------+--------+------------+-----+
    | 1          | bob  | male   | 9esKZAEAoBquXVJo3ZptvoI09XuM4bSFTqF1mXH1BO4= | 13900001234|
    | 2          | allen| male   | 9esKZAIAoBquXVJoJYqnXieAANih7FR59luePvdHB9U= | 13900001111|
    | 3          | kate | female | 9esKZAMAoBquXVJoppwxgVwPYBnvjIMklWLmJ/sU0Y8= | 13900002222|
    | 4          | annie| female | 9esKZAQAoBquXVJoB85RUFCLMbdyEBSz7LdS4M3Guvk= | 13900003333|
    +------------+------+--------+------------+-----+

NEW_KEYSET

  • Sintaxe

    binary NEW_KEYSET(string <key_type>, [string <description>])
  • Descrição

    Cria um keyset com base no tipo de algoritmo especificado.

  • Parâmetros

    • key_type: Obrigatório. O tipo de algoritmo usado para criar uma chave de dados. Os algoritmos suportados incluem AES-GCM-256, AES-SIV-CMAC-128 e AES-SIV-CMAC-256.

    • description: Opcional. A descrição da chave de dados.

  • Valor de retorno

    Retorna um keyset do tipo BINARY.

    Nota

    Use a função HEX para converter um valor BINARY em STRING e a função UNHEX para converter um valor STRING em BINARY.

  • Exemplo

    select hex(NEW_KEYSET('AES-GCM-256', 'hello world'));

    O seguinte resultado é retornado.

    +------------+
    | _c0        |
    +------------+
    | 0A10577567735A514541554D42776E684C4212580A330A0B4145532D47434D2D323536122017F7A430B9D4B59B55454FD4B486216059F1B748CE0502D901EBEACEAB6569191801200210011A10577567735A514541554D42776E684C4220022A0B68656C6C6F20776F726C64 |
    +------------+

ADD_KEY_TO_KEYSET

  • Sintaxe

    binary ADD_KEY_TO_KEYSET(binary <keyset>, string <key_type>, binary <raw_key>, [string <description>])
  • Descrição

    Adiciona uma chave a um keyset e configura a chave como chave mestra.

  • Parâmetros

    • keyset: Obrigatório. Este parâmetro especifica um keyset existente do tipo BINARY.

    • key_type: Obrigatório. Este parâmetro especifica o tipo de algoritmo da chave que você deseja adicionar. Valores válidos: AES-GCM-256, AES-SIV-CMAC-128 e AES-SIV-CMAC-256.

    • raw_key: Obrigatório. Este parâmetro especifica a chave que você deseja adicionar e configurar como chave mestra. A chave é do tipo BINARY.

    • description: Opcional. Este parâmetro fornece uma descrição da chave de dados.

  • Valor de retorno

    Retorna um keyset BINARY.

    Nota

    Use a função HEX para converter valores BINARY em STRING e a função UNHEX para converter valores STRING em BINARY.

  • Exemplo

    select hex(ADD_KEY_TO_KEYSET(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), 'AES-SIV-CMAC-128', unhex('b75585cf321cdcad42451690cdb7bfc49c26092f60f854e72d43244c55620a3d'),'description') );

    O seguinte resultado é retornado:

    +------------+
    | _c0        |
    +------------+
    | 0A10596530735A5145414150447273424C4212580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64125D0A380A104145532D5349562D434D41432D3132381220B75585CF321CDCAD42451690CDB7BFC49C26092F60F854E72D43244C55620A3D1801200110011A10596530735A5145414150447273424C4220022A0B6465736372697074696F6E |
    +------------+

KEYSET_FROM_JSON

  • Sintaxe

    BINARY KEYSET_FROM_JSON(STRING <json_keyset>)
  • Descrição

    A função KEYSET_FROM_JSON converte uma string de keyset formatada em JSON para o tipo BINARY.

  • Parâmetros

    json_keyset: Obrigatório. STRING. Uma string de keyset formatada em JSON.

  • Valor de retorno

    Retorna o keyset como um valor BINARY.

    Nota

    Para converter entre valores BINARY e STRING, use as funções HEX e UNHEX.

  • Exemplo

    SELECT HEX(KEYSET_FROM_JSON('{
        "key": [{
                "description": "hello world",
                "key_id": "r8MqZAEA8PDd3QSL",
                "key_meta_data": {
                    "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE",
                    "key_material_type": "SYMMETRIC",
                    "type": "AES-GCM-256",
                    "value": "Jqj7ESbfT1td0DwYDmkZVl13FsuykYFe+1u/MPi++a8="},
                "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE",
                "status": "ENABLED"}],
        "primary_key_id": "r8MqZAEA8PDd3QSL"}')) ;

    A consulta retorna o seguinte:

    +------------+
    | _c0        |
    +------------+
    | 0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64 |
    +------------+

KEYSET_TO_JSON

  • Sintaxe

    STRING KEYSET_TO_JSON(BINARY <keyset>)
  • Descrição

    Converte um keyset do tipo BINARY em uma string JSON legível. Após a conversão, visualize os detalhes do keyset.

  • Parâmetros

    keyset: Obrigatório. Um valor do tipo BINARY. Este parâmetro especifica um keyset existente.

  • Valor de retorno

    Um keyset no formato JSON é retornado. Descrição dos parâmetros:

    • key_id: o ID da chave.

    • key_material_origin: a origem da chave.

    • key_material_type: o tipo de criptografia da chave.

    • type: o tipo de algoritmo da chave.

    • value: o valor da chave.

    • output_prefix_type: o formato do texto cifrado após a criptografia.

    Nota

    Use HEX para converter o tipo BINARY em STRING ou UNHEX para converter o tipo STRING em BINARY, conforme suas necessidades de negócio.

  • Exemplos

    SELECT KEYSET_TO_JSON(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64')) ;

    O seguinte resultado é retornado:

     +------------+
    | _c0        |
    +------------+
    | {
        "key": [{
                "description": "hello world",
                "key_id": "r8MqZAEA8PDd3QSL",
                "key_meta_data": {
                    "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE",
                    "key_material_type": "SYMMETRIC",
                    "type": "AES-GCM-256",
                    "value": "Jqj7ESbfT1td0DwYDmkZVl13FsuykYFe+1u/MPi++a8="},
                "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE",
                "status": "ENABLED"}],
        "primary_key_id": "r8MqZAEA8PDd3QSL"} |
    +------------+

ROTATE_KEYSET

  • Sintaxe

    binary ROTATE_KEYSET(binary <keyset>, string <key_type>, [string <description> ])
  • Descrição

    Permite que o sistema produza automaticamente uma nova chave e configure a nova chave como chave mestra.

  • Parâmetros

    • keyset: Obrigatório. Um valor do tipo BINARY. Este parâmetro especifica o keyset que você deseja atualizar.

    • key_type: Obrigatório. Este parâmetro especifica o tipo de algoritmo da nova chave. Valores válidos: AES-GCM-256, AES-SIV-CMAC-128 e AES-SIV-CMAC-256.

    • description: Opcional. Este parâmetro fornece uma descrição da nova chave de dados.

  • Valor de retorno

    Retorna um keyset BINARY.

    Nota

    Use a função HEX para converter BINARY em STRING e a função UNHEX para converter STRING em BINARY.

  • Exemplo

    select ROTATE_KEYSET(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), 'AES-SIV-CMAC-256', 'hello world') ;

    O seguinte resultado é retornado:

    +------------+
    | _c0        |
    +------------+
    | =0A=10BVIuZQEAcHHPLfn1=12X=0A3=0A=0BAES-GCM-256=12=20&=A8=FB=11&=DFO[]=D0<=18=0Ei=19V]w=16=CB=B2=91=81^=FB[=BF0=F8=BE=F9=AF=18=01=20=02=10=01=1A=10r8MqZAEA8PDd3QSL=20=02*=0Bhello=20world=12}=0AX=0A=10AES-SIV-CMAC-256=12@=9D=AD=B7=D6=AF=01=B2=9D=CE=C3=02y=A9=DB=E1=17q>'F=DC=F5=EF=FFI=7F=F0w)=95F=07>=9C=EDqn=DF=0E=1E=16bP&=D3=7F>gV=CBl=8AGJCm=93=FF=F9=96=AD=1A=C0=BC=18=01=20=02=10=01=1A=10BVIuZQEAcHHPLfn1=20=02*=0Bhello=20world |
    +-----------

NEW_WRAPPED_KEYSET

  • Sintaxe

    binary NEW_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <key_type>
    [, string <description>, [string <role_chain>]])
  • Descrição

    Use o MaxCompute com o KMS para gerenciar chaves. Gere um wrapped keyset criptografando um keyset com base em uma chave KMS. Após gerar um wrapped keyset, registre e armazene manualmente o wrapped keyset para subsequente criptografia e descriptografia de dados com base em chaves KMS. No processo de criptografia ou descriptografia, todas as chaves são geradas automaticamente pelo sistema. Não é possível visualizar a chave original usada para criptografia e descriptografia. Dessa forma, os dados podem ser criptografados ou descriptografados de maneira mais segura. A função NEW_WRAPPED_KEYSET assume o Alibaba Cloud Resource Name (ARN) de uma função que pode usar ARNs de chave mestra do cliente (CMK) do KMS para o MaxCompute e criar um wrapped keyset. O ARN da função é especificado por role_arn. O ARN da CMK do KMS é especificado por kms_cmk_arn. A função também é usada para conceder a outras contas Alibaba Cloud as permissões para usar wrapped keysets com base em role_chain.

    Antes de usar a função NEW_WRAPPED_KEYSET, certifique-se de que os seguintes pré-requisitos sejam atendidos:

    • O KMS está ativado e uma instância KMS foi criada.

    • Uma chave KMS foi criada e o ARN da chave especificado por kms_cmk_arn foi obtido.

    • Uma função RAM foi criada e o MaxCompute está autorizado a acessar o KMS. O ARN da função RAM foi obtido. O ARN da função é especificado por role_arn.

    Para obter mais informações, consulte a seção "Ativar KMS e conceder permissões no KMS" em Activate KMS and configure permissions.

  • Parâmetros

    • kms_cmk_arn: Obrigatório. Este parâmetro especifica o ARN da CMK do KMS usada para criptografar um keyset. O valor do parâmetro está no formato 'acs:kms:<RegionId>:<UserId>:key/<CmkId>'. RegionId especifica o ID da região, UserId especifica o ID do usuário e CmkId especifica o ID da CMK. Obtenha o ARN na página Detalhes da Chave no console KMS.

    • role_arn: Obrigatório. Este parâmetro especifica o ARN da função RAM que tem permissões no KMS. A função precisa ser assumida pelo MaxCompute. O valor do parâmetro está no formato 'acs:ram:${<userAID>}:role/${<roleName>}'. userAID especifica o ID do usuário e roleName especifica o nome da função.

    • key_type: Obrigatório. Este parâmetro especifica o tipo de algoritmo da chave no keyset recém-gerado. Valores válidos: AES-GCM-256, AES-SIV-CMAC-128 e AES-SIV-CMAC-256.

    • description: Opcional. Este parâmetro fornece uma descrição da chave.

    • role_chain: Opcional. Este parâmetro especifica a cadeia de funções para autorização do usuário. O valor do parâmetro está no formato 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Use cadeias de funções para chamar wrapped keysets entre contas Alibaba Cloud.

  • Valor de retorno

    Um wrapped keyset do tipo BINARY é retornado. Use a função HEX para converter o wrapped keyset do tipo BINARY em um keyset do tipo STRING, conforme suas necessidades de negócio. Para obter mais informações sobre a função HEX, consulte HEX.

  • Exemplos

    • Criar um wrapped keyset.

      select hex(NEW_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t','acs:ram::1**************7:role/kms', 'AES-GCM-256', 'hello'));

      O seguinte resultado é retornado:

      +-----+
      | _c0 |
      +-----+
      | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78434A373434582F54756C5A547A4E69337562786F4B3543412F616655573262786D345A41306B464C674A2F5758324F4E514E346746306F303236376D35335A6471797237366E57565A6836387A52687A4A673945784B6E677568794A376E6F4A68573677684B5A555A42786E4A383742536C4D46326A374F71474F4C414A6B665779694557394D58664876576E306C6D49777052746A77325643707A4259517277327944354343396C50586F31346A4351506253612F3044394C4C6E6E622F747A6B57316E4F564A6C5359354B35526130537565584F33507856773D |
      +-----+
    • Criar um wrapped keyset e permitir que outras funções chamem o wrapped keyset.

      select hex(NEW_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t','acs:ram::1**************7:role/kms', 'AES-GCM-256', 'hello','acs:ram::1**************7:role/kms1'));

      O seguinte resultado é retornado:

      +-----+
      | _c0 |
      +-----+
      | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D784D59716D4C767954716B3562444779574C7A387965774966432F516B4A59616F57623648364A546A62434F7A7A42634F517A687A6E526F36543866714E4E63555546566874696C4A3947713556667A2F7851757A55686467504C517A2B6C433337485A535449744B53714E396B6639587666487A4D7957643842334D3179392F67423774726835437A556F786A74614571612F5A3543447668524A7731426566525647796A77574974476243475A4E594550714E767963532B333432743347396B714777626C54336F57706939706E437A667A4E4D6F4C63714F453D |
      +-----+

REWRAP_KEYSET

  • Sintaxe

    binary REWRAP_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>, [string <role_chain>])
  • Descrição

    O MaxCompute se integra ao KMS para gerenciar chaves. Uma chave KMS criptografa um keyset gerado para criar um wrapped keyset. A função REWRAP_KEYSET recriptografa um wrapped keyset que foi gerado pela função NEW_WRAPPED_KEYSET com uma nova chave KMS.

    Antes de usar a função REWRAP_KEYSET, conclua as seguintes tarefas:

    • Você possui um wrapped keyset gerado pela função NEW_WRAPPED_KEYSET. Para obter mais informações, consulte NEW_WRAPPED_KEYSET.

    • Crie uma nova chave KMS e obtenha seu Alibaba Cloud Resource Name (ARN) (kms_cmk_arn). Conceda à função RAM a permissão para usar a nova chave. Para obter mais informações, consulte Enable KMS and complete the configuration.

  • Parâmetros

    • kms_cmk_arn: Obrigatório.

      O ARN da chave mestra do cliente (CMK) do KMS usada para recriptografar o keyset. O formato é 'acs:kms:<RegionId>:<UserId>:key/<CmkId>'. O ARN contém o ID da região, o ID do usuário e o ID da CMK. Obtenha o ARN na página de detalhes da chave no console Key Management Service. Para obter mais informações, consulte Enable KMS and complete the configuration.

    • role_arn: Obrigatório.

      O ARN da função RAM que tem permissões tanto nas chaves KMS antigas quanto nas novas. Esta função deve ser concedida ao MaxCompute. O formato é 'acs:ram:${<userAID>}:role/${<roleName>}'. O ARN contém o ID do usuário e o nome da função. Para obter o ARN, consulte Enable KMS and complete the configuration.

    • wrapped_keyset: Obrigatório.

      O wrapped keyset a ser recriptografado.

    • role_chain: Opcional. Este parâmetro especifica a cadeia de funções para autorização do usuário. O valor do parâmetro está no formato 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Use cadeias de funções para chamar wrapped keysets entre contas Alibaba Cloud.

  • Valor de retorno

    Um wrapped keyset do tipo BINARY é retornado. Use a função HEX para converter o wrapped keyset do tipo BINARY em um keyset do tipo STRING, conforme suas necessidades de negócio. Para obter mais informações sobre a função HEX, consulte HEX.

  • Exemplos

    Nota

    Execute o seguinte código de amostra que contém variáveis no editor de código ou insira as variáveis diretamente na instrução SQL. O MaxCompute não suporta escopos de variáveis entre instruções SQL.

    • Recriptografar um wrapped keyset:

      SELECT hex(REWRAP_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz******************', 'acs:ram::1**************7:role/kms', unhex('<wrapped_keyset>')));
    • Recriptografar um wrapped keyset e permitir que funções de outras contas Alibaba Cloud o chamem:

      SELECT hex(REWRAP_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz******************', 'acs:ram:${<UserId>}:role/${<roleName>}', unhex('<wrapped_keyset>'), 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}')));

ROTATE_WRAPPED_KEYSET

  • Sintaxe

    binary ROTATE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>,string <key_type> [,string description,[string <role_chain>]])
  • Descrição

    Use o MaxCompute com o KMS para gerenciar chaves. Gere um wrapped keyset criptografando um keyset com base em uma chave KMS. A função ROTATE_WRAPPED_KEYSET usa uma nova chave KMS e um novo algoritmo de chave para recriptografar um wrapped keyset gerado usando a função NEW_WRAPPED_KEYSET. Comparada à função REWRAP_KEYSET, a função ROTATE_WRAPPED_KEYSET pode usar um novo algoritmo de chave para recriptografia.

    Antes de usar a função ROTATE_WRAPPED_KEYSET, certifique-se de que os seguintes pré-requisitos sejam atendidos:

    • Um wrapped keyset foi gerado usando a função NEW_WRAPPED_KEYSET. Para obter mais informações, consulte NEW_WRAPPED_KEYSET.

    • Uma chave KMS foi criada e o ARN da chave especificado por kms_cmk_arn foi obtido. Uma função RAM recebeu permissões para usar a nova chave.

  • Parâmetros

    • kms_cmk_arn: Obrigatório. Este parâmetro especifica o ARN da chave mestra do cliente (CMK) do KMS que você deseja usar para recriptografar um wrapped keyset. O valor do parâmetro está no formato 'acs:kms:<RegionId>:<UserId>:key/<CmkId>'. RegionId especifica o ID da região, UserId especifica o ID do usuário e CmkId especifica o ID da CMK. Obtenha o ARN na página Detalhes da Chave no console KMS.

    • role_arn: Obrigatório. Este parâmetro especifica o ARN da função RAM que tem permissões tanto nas chaves KMS antigas quanto nas novas. O valor do parâmetro está no formato 'acs:ram:${<userAID>}:role/${<roleName>}'. userAID especifica o ID do usuário e roleName especifica o nome da função.

    • wrapped_keyset: Obrigatório. Este parâmetro especifica o wrapped keyset que você deseja recriptografar.

    • key_type: Obrigatório. Este parâmetro especifica o tipo de algoritmo da chave no keyset recém-gerado. Valores válidos: AES-GCM-256, AES-SIV-CMAC-128 e AES-SIV-CMAC-256.

    • description: Opcional. Este parâmetro fornece uma descrição da chave.

    • role_chain: Opcional. Este parâmetro especifica a cadeia de funções para autorização do usuário. O valor do parâmetro está no formato 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Use cadeias de funções para chamar wrapped keysets entre contas Alibaba Cloud.

  • Valor de retorno

    Um wrapped keyset do tipo BINARY é retornado. Use a função HEX para converter o wrapped keyset do tipo BINARY em um keyset do tipo STRING, conforme suas necessidades de negócio. Para obter mais informações sobre a função HEX, consulte HEX.

  • Exemplos

    Nota

    Execute o seguinte código de amostra que contém variáveis no editor de código ou insira as variáveis diretamente na instrução SQL. O MaxCompute não suporta escopos de variáveis entre instruções SQL.

    • Recriptografar um wrapped keyset.

      @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
      @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
      @origin_key := unhex('<wrapped_keyset>');
      select hex(ROTATE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, 'AES-GCM-256', 'hello world'));
    • Recriptografar um wrapped keyset e permitir que outras funções chamem o wrapped keyset.

      @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
      @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
      @origin_key := unhex('<wrapped_keyset>');
      @role_chain := 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}';
      select hex(ROTATE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, 'AES-GCM-256', 'hello world', @role_chain));

USE_WRAPPED_KEYSET

  • Sintaxe

    binary USE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset> [,string <role_chain>])
  • Descrição

    Use o MaxCompute com o KMS para gerenciar chaves. Gere um wrapped keyset criptografando um keyset existente com base em uma chave KMS. A função USE_WRAPPED_KEYSET converte um wrapped keyset gerado usando a função NEW_WRAPPED_KEYSET em um keyset básico. O keyset básico é usado como parâmetro na função de criptografia ou descriptografia para criptografar ou descriptografar dados. Use também a função USE_WRAPPED_KEYSET para obter informações sobre um wrapped keyset e salvar as informações para manutenção subsequente.

    Antes de usar a função USE_WRAPPED_KEYSET, certifique-se de que os seguintes pré-requisitos sejam atendidos:

    • Um wrapped keyset foi gerado usando a função NEW_WRAPPED_KEYSET. Para obter mais informações, consulte NEW_WRAPPED_KEYSET.

    • Uma chave KMS foi criada e o Alibaba Cloud Resource Name (ARN) da chave foi obtido. O ARN da chave é especificado por kms_cmk_arn. Uma função RAM recebeu permissões para usar a nova chave.

  • Parâmetros

    • kms_cmk_arn: Obrigatório. Este parâmetro especifica o ARN da chave mestra do cliente (CMK) do KMS do keyset que você deseja criptografar. O valor do parâmetro está no formato 'acs:kms:<RegionId>:<UserId>:key/<CmkId>'. RegionId especifica o ID da região, UserId especifica o ID do usuário e CmkId especifica o ID da CMK. Obtenha o ARN na página Detalhes da Chave no console KMS.

    • role_arn: Obrigatório. Este parâmetro especifica o ARN da função RAM que tem permissões no KMS. A função precisa ser assumida pelo MaxCompute. O valor do parâmetro está no formato 'acs:ram:${<userAID>}:role/${<roleName>}'. userAID especifica o ID do usuário e roleName especifica o nome da função.

    • wrapped_keyset: Obrigatório. Este parâmetro especifica um wrapped keyset existente.

    • role_chain: Opcional. Este parâmetro especifica a cadeia de funções para autorização do usuário. O valor do parâmetro está no formato 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Use cadeias de funções para chamar wrapped keysets entre contas Alibaba Cloud.

  • Valor de retorno

    Um keyset dessensibilizado do tipo STRUCT é retornado. Use a função get_json_object para obter campos relacionados ao keyset, conforme suas necessidades de negócio.

  • Exemplo

    Nota

    Execute o seguinte código de amostra que contém variáveis no editor de código ou insira as variáveis diretamente na instrução SQL. O MaxCompute não suporta escopos de variáveis entre instruções SQL.

    Obter as informações do algoritmo de chave de um wrapped keyset.

    @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
    @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
    @origin_key := unhex('<wrapped_keyset>');
    @role_chain := 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}';
    @use_keyset_new := USE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, @role_chain);
    
    select get_json_object(get_json_object(use_keyset_new.wrapped_keyset_info,'$.masked_keyset'), '$.key[0].key_meta_data.type');

    O seguinte resultado é retornado:

    +-----+
    | _c0 |
    +-----+
    | AES-GCM-256 |
    +-----+

ENHANCED_SYM_ENCRYPT

  • Sintaxe

    binary ENHANCED_SYM_ENCRYPT(binary <keyset> , string|binary <plaintext> [,string <additional_data>])
  • Descrição

    O MaxCompute permite usar a função ENHANCED_SYM_ENCRYPT para criptografar dados usando um keyset básico ou wrapped keyset especificado. Crie um wrapped keyset criptografando um keyset existente com base em uma chave do Key Management Service (KMS). Comparados aos keysets básicos, os wrapped keysets permitem gerenciar chaves com o KMS de maneira mais segura.

    Antes de usar a função ENHANCED_SYM_ENCRYPT, certifique-se de que os seguintes pré-requisitos sejam atendidos:

    • Um keyset básico ou wrapped keyset foi gerado usando a função NEW_KEYSET ou NEW_WRAPPED_KEYSET. Para obter mais informações, consulte NEW_KEYSET ou NEW_WRAPPED_KEYSET

    • Um keyset básico foi obtido de um wrapped keyset usando a função USE_WRAPPED_KEYSET. Este pré-requisito deve ser atendido se você quiser usar um wrapped keyset para criptografar dados. O keyset básico é usado como parâmetro na função ENHANCED_SYM_ENCRYPT para criptografar dados. Além disso, sua conta deve ter atribuída a função que possui permissões para usar o wrapped keyset.

  • Parâmetros

    • keyset: Obrigatório. Este parâmetro especifica um keyset básico do tipo BINARY ou um wrapped keyset do tipo STRUCT.

    • plaintext: Obrigatório. Este parâmetro especifica o texto simples do tipo STRING ou BINARY que você deseja criptografar.

    • additional_data: Opcional. Este parâmetro especifica as informações de verificação suportadas pelo algoritmo. As informações de verificação são do tipo STRING.

  • Valor de retorno

    Texto cifrado do tipo BINARY é retornado.

  • Dados de amostra

    -- Create a table.
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- Insert data into the table.
    insert overwrite table mf_user_info values(1,"bob","male","0001","13900001234"),
                                           (2,"allen","male","0011","13900001111"),
                                         (3,"kate","female","0111","13900002222"),
                                         (4,"annie","female","1111","13900003333");
    -- Query data from the table.
    select * from mf_user_info;
    +------------+------+--------+------------+------------+
    | id         | name | gender | id_card_no |    tel     |
    +------------+------+--------+------------+------------+
    | 1          | bob  | male   | 0001       | 13900001234|
    | 2          | allen| male   | 0011       | 13900001111|
    | 3          | kate | female | 0111       | 13900002222|
    | 4          | annie| female | 1111       | 13900003333|
    +------------+------+--------+------------+------------+
  • Exemplos

    • Criptografar a coluna id_card_no na tabela mf_user_info usando um keyset básico.

      insert overwrite table mf_user_info
      select id,
          name,
          gender,
             base64(ENHANCED_SYM_ENCRYPT(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), id_card_no ))as id_card_no,
            tel
      from mf_user_info;

      A seguinte instrução de amostra consulta o resultado da criptografia:

      select * from mf_user_info;
      
      -- The following result is returned:
      +------------+------+--------+------------+-----+
      | id         | name | gender | id_card_no | tel |
      +------------+------+--------+------------+-----+
      | 1          | bob  | male   | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQAwkVhYOocPQll8LmdzSwkRf3v2iTow+TAmnQ== | 13900001234 |
      | 2          | allen | male   | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQBgj1hYOodIPdnyZ0ijZ9RmT+50xbxXh5cwcg== | 13900001111 |
      | 3          | kate | female | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQCwp1hYOoentQgkfUqctPbmX96k9eD018xg9Q== | 13900002222 |
      | 4          | annie | female | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQDQqFhYOodexhRmfh6VieEwePZscC4nUVTJXQ== | 13900003333 |
      +------------+------+--------+------------+-----+
    • Criptografar a coluna tel na tabela mf_user_info usando um wrapped keyset.

      1. Gerar um wrapped keyset e gravá-lo em uma tabela.

        -- Create a table.
        create table mf_keyset_kms (id string,ks binary);
        -- Create a wrapped keyset and write it to the table.
        insert into mf_keyset_kms 
              select '1',
                     NEW_WRAPPED_KEYSET(
                        'acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                        'acs:ram::1**************7:role/kms', 
                        'AES-GCM-256', 
                       'description');
        -- Query data from the table.
        select id,hex(ks) from mf_keyset_kms;
        
        -- The following result is returned:
        +----+-----+
        | id | _c1 |
        +----+-----+
        | 1  | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D |
        +----+-----+
      2. Criptografar a coluna tel usando o wrapped keyset.

        select /*+ MAPJOIN(a) */ 
               id,
               name,
        	   gender,
        	   id_card_no, 
               ENHANCED_SYM_ENCRYPT(
                   USE_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                                      'acs:ram::1**************7:role/kms', 
                                      unhex('613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D')
                                     ),
                   tel
               ) as tel 
         FROM mf_user_info;

        O seguinte resultado é retornado:

        +------------+------+--------+------------+------+
        | id         | name | gender | id_card_no | tel  |
        +------------+------+--------+------------+------+
        | 1          | bob  | male   | 0001       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=90=86=05=94z;=18=A6j=1CN=E5=9F=AC)=8D=D6=D8=0D=A2Y{kq=EE=F4~=C4=A7=9BS=A1w |
        | 2          | allen | male   | 0011       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=20=AA=05=94z;=85=D8=08a=A2]=02d=20=B1=C3=AE=AF=1C{=EB=EA=C4=81=B5A=15=1BR=F7g=9B |
        | 3          | kate | female | 0111       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=20=B6=05=94z;[C=12=81=8B<=C1=9D=E2=CF=CE=BC=AE=A7=84=0F[=7CI=B9=B7=9D=DD=89=A8=FD! |
        | 4          | annie | female | 1111       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=00=A2=05=94z;E=03A=BC=7C=88=CFJ=14=B9=BD=A1=BF=ED=20=11=A3=A6/+%=0Fe=DD=C7=C8=0A |
        +------------+------+--------+------------+------+

ENHANCED_SYM_DECRYPT

  • Sintaxe

    BINARY ENHANCED_SYM_DECRYPT(BINARY <keyset> , BINARY <ciphertext> [,string <additional_data>])
  • Descrição

    Use a função ENHANCED_SYM_DECRYPT no MaxCompute para descriptografar dados com um keyset básico ou wrapped keyset especificado. O keyset usado para descriptografia deve ser o mesmo usado para criptografia. Um wrapped keyset é criado criptografando um keyset existente com uma chave do Key Management Service (KMS). Use wrapped keysets com o KMS para gerenciar chaves de forma mais segura do que com keysets básicos.

    Antes de usar a função ENHANCED_SYM_DECRYPT, conclua as seguintes operações:

    • Gere um keyset básico ou um wrapped keyset usando a função NEW_KEYSET ou NEW_WRAPPED_KEYSET. Para obter mais informações, consulte NEW_KEYSET e NEW_WRAPPED_KEYSET.

    • Se você usar um wrapped keyset para descriptografar dados, deverá ter as permissões da função associada ao wrapped keyset. Para obter mais informações, consulte Activate KMS and complete configurations.

  • Parâmetros

    keyset: Obrigatório. O keyset do usuário, que pode ser do tipo BINARY ou STRUCT.

    Importante

    O keyset básico ou wrapped keyset usado para descriptografia deve ser o mesmo usado para criptografia.

    ciphertext: Obrigatório. O texto cifrado do tipo BINARY a ser descriptografado. O texto cifrado deve ter sido criptografado com o keyset especificado.

  • additional_data: Opcional. Este parâmetro especifica as informações de verificação suportadas pelo algoritmo. As informações de verificação são do tipo STRING.

  • Valor de retorno

    Retorna texto simples do tipo BINARY.

  • Dados de amostra

    -- Create a table.
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- Insert data into the table.
    insert overwrite table mf_user_info values(1,"bob","male","0001","13900001234"),
                                           (2,"allen","male","0011","13900001111"),
                                         (3,"kate","female","0111","13900002222"),
                                         (4,"annie","female","1111","13900003333");
    -- Query data from the table.
    select * from mf_user_info;
    +------------+------+--------+------------+------------+
    | id         | name | gender | id_card_no |    tel     |
    +------------+------+--------+------------+------------+
    | 1          | bob  | male   | 0001       | 13900001234|
    | 2          | allen| male   | 0011       | 13900001111|
    | 3          | kate | female | 0111       | 13900002222|
    | 4          | annie| female | 1111       | 13900003333|
    +------------+------+--------+------------+------------+
  • Exemplos

    • Descriptografar a coluna id_card_no na tabela mf_user_info usando um keyset simples:

      Importante

      Antes de descriptografar os dados, certifique-se de que eles foram criptografados. O keyset básico ou wrapped keyset usado para descriptografia deve ser o mesmo usado para criptografia. Para um exemplo de operação de criptografia, consulte ENHANCED_SYM_ENCRYPT.

      INSERT OVERWRITE TABLE mf_user_info 
      SELECT id,
             name,
             gender,
             CAST(ENHANCED_SYM_DECRYPT(unhex('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), UNBASE64(id_card_no)) AS STRING) AS id_card_no,
             tel
      FROM mf_user_info;

      O seguinte resultado é retornado:

      SELECT * FROM mf_user_info;
      
      -- Sample result
      +------------+------+--------+------------+------------+
      | id         | name | gender | id_card_no |    tel     |
      +------------+------+--------+------------+------------+
      | 1          | bob  | male   | 0001       | 13900001234|
      | 2          | allen| male   | 0011       | 13900001111|
      | 3          | kate | female | 0111       | 13900002222|
      | 4          | annie| female | 1111       | 13900003333|
      +------------+------+--------+------------+------------+
    • Usar um wrapped keyset para descriptografar a coluna criptografada mf_user_info na tabela tel:

       SELECT /*+ MAPJOIN(a) */ 
             id,
             name,
      	   gender,
      	   id_card_no,
             ENHANCED_SYM_DECRYPT(
               USE_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                                    'acs:ram::1**************7:role/kms', 
                                    unhex('613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D')
                                   ),
             	 ENHANCED_SYM_ENCRYPT(
                 USE_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                                    'acs:ram::1**************7:role/kms', 
                                    unhex('613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D')
                                   ),
                 tel
             ),
             ''
            )
             AS tel 
       FROM mf_user_info;

      O seguinte resultado é retornado:

      +------------+------+--------+------------+------+
      | id         | name | gender | id_card_no | tel  |
      +------------+------+--------+------------+------+
      | 1          | bob  | male   | 0001       | 13900001234 |
      | 2          | allen | male   | 0011       | 13900001111 |
      | 3          | kate | female | 0111       | 13900002222 |
      | 4          | annie | female | 1111       | 13900003333 |
      +------------+------+--------+------------+------+

Tópicos relacionados