Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x)
Este artigo explica como usar o PolyBase para consultar dados externos no armazenamento de objetos compatíveis com o S3.
O SQL Server 2022 (16.x) introduz a capacidade de se conectar a qualquer armazenamento de objetos compatível com o S3, há duas opções disponíveis para autenticação: autenticação básica ou autorização de passagem (também conhecida como autorização STS).
A Autenticação Básica, também conhecida como credenciais estáticas, exige que o usuário armazene o access key id e secret key id no SQL Server. O usuário revoga explicitamente e gira as credenciais sempre que necessário. O controle de acesso refinado requer que o administrador gerencie credenciais estáticas para cada login, essa abordagem pode ser desafiadora ao lidar com dezenas ou centenas de credenciais exclusivas.
A autorização de passagem (STS) oferece uma solução para esses problemas, permitindo o uso de identidades do próprio usuário do SQL Server para acessar o armazenamento de objetos compatível com o S3. O armazenamento de objetos compatível com o S3 tem a capacidade de atribuir uma credencial temporária usando o STS (Serviço de Token Seguro). Essas credenciais são de curto prazo e geradas dinamicamente.
Este artigo inclui instruções para autenticação básica e autorização de passagem (STS).
Pré-requisitos
Para usar os recursos de integração de armazenamento de objetos compatíveis com o S3, você precisa das seguintes ferramentas e recursos:
- Instale o recurso PolyBase para SQL Server.
- Instale o SQL Server Management Studio (SSMS).
- Armazenamento compatível com S3.
- Um bucket do S3 foi criado. Não é possível criar ou configurar buckets a partir do SQL Server.
- Um usuário (
Access Key ID) e o segredo (Secret Key ID) conhecido por você. Você precisa de ambos para se autenticar no endpoint de armazenamento de objetos do S3. - O Transport Layer Security (TLS) deve ser configurado. Presume-se que todas as conexões serão transmitidas com segurança por HTTPS e não HTTP. O ponto de extremidade será validado por um certificado instalado no host do sistema operacional SQL Server. Para obter mais informações sobre TLS e certificados, consulte Configurar o Mecanismo de Banco de Dados do SQL Server para criptografar conexões.
Permissões
Para que o usuário proxy leia o conteúdo de um bucket do S3, o usuário (Access Key ID) precisa ter permissão para executar as seguintes ações no ponto de extremidade do S3:
-
GetBucketLocation e GetObject permissões são necessárias para ler um arquivo específico do armazenamento de objetos do S3.
-
ListBucket é necessário para tabelas externas ou consultas OPENROWSET que apontem para um local de pasta no S3, em vez de um único ficheiro. Sem permissões ListBucket , você receberá o erro
Msg 4860, Level 16, State 7, Line 15 Cannot bulk load. The file "s3://<ip address>:9000/bucket/*.*" does not exist or you do not have file access rights.
-
ListBucket é necessário para tabelas externas ou consultas OPENROWSET que apontem para um local de pasta no S3, em vez de um único ficheiro. Sem permissões ListBucket , você receberá o erro
- A permissão PutObject é necessária para escrever no armazenamento de objetos do S3.
Dica
Seu provedor de armazenamento de objetos compatível com o S3 pode exigir permissões adicionais de operação de API ou usar nomenclaturas diferentes para funções que contenham permissões para operações de API. Consulte a documentação do produto.
Ativar o PolyBase
Habilite o PolyBase em
sp_configure:EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1; GO RECONFIGURE GOConfirme a configuração:
EXEC sp_configure @configname = 'polybase enabled';
Autenticação
Para continuar, escolha Autenticação Básica ou autorização de passagem (STS).
Autenticação básica
Antes de criar uma credencial com escopo de banco de dados, o banco de dados de usuário deve ter uma chave mestra para proteger a credencial. Para obter mais informações, consulte CREATE MASTER KEY.
Criar uma credencial com escopo de banco de dados com Autenticação Básica
O seguinte script de exemplo cria uma credencial com âmbito específico de base de dados s3-dc no banco de dados database_name numa instância do SQL Server. Para obter mais informações, consulte CREATE DATABASE SCOPED CREDENTIAL.
USE [database_name];
GO
IF NOT EXISTS(SELECT * FROM sys.database_scoped_credentials WHERE name = 's3_dc')
BEGIN
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>' ;
END
GO
Verifique a nova credencial com escopo de banco de dados com sys.database_scoped_credentials:
SELECT * FROM sys.database_scoped_credentials;
Criar uma fonte de dados externa com a Autenticação Básica
O script de exemplo a seguir cria uma fonte de dados externa s3_ds no banco de dados do usuário de origem no SQL Server. A fonte de dados externa faz referência à credencial de escopo do banco de dados s3_dc. Para obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Verifique a nova fonte de dados externa com sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
URLs hospedadas virtualmente
Alguns sistemas de armazenamento compatíveis com o S3 (como o Amazon Web Services) utilizam URLs no estilo virtual_hosted para implementar a estrutura de pastas no bucket do S3. Adicione o seguinte CONNECTION_OPTIONS para permitir a criação de tabelas externas que apontem para locais de pastas no bucket S3, por exemplo, CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.
Sem essa configuração CONNECTION_OPTIONS, ao consultar tabelas externas apontando para uma pasta, você pode observar o seguinte erro:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
Limitações da autenticação básica
- Para armazenamento de objetos compatível com o S3, os clientes não têm permissão para criar seu ID de chave de acesso com um
:caractere. - O comprimento total do URL é limitado a 259 caracteres. Isso significa que
s3://<hostname>/<objectkey>não deve exceder 259 caracteres. As3://contagem para esse limite, portanto, o comprimento do caminho não pode exceder 259-5 = 254 caracteres. - O nome da credencial SQL é limitado por 128 caracteres no formato UTF-16.
- O nome da credencial criada deve conter o nome do bucket, a menos que essa credencial seja para uma nova fonte de dados externa.
- O ID da Chave de Acesso e o ID da Chave Secreta devem conter apenas valores alfanuméricos.
Autorização de passagem (STS)
Aplica-se a: SQL Server 2022 (16.x) apenas.
O armazenamento de objetos compatível com o S3 tem a capacidade de atribuir uma credencial temporária usando o Serviço de Token Seguro (STS). Essas credenciais são de curto prazo e geradas dinamicamente.
A autorização de passagem depende do ADFS (Serviço de Federação do Ative Directory) atuando como provedor de identidade OpenID Connect (OIDC), cabe ao ADFS se comunicar com o STS de armazenamento de objetos compatível com o S3, solicitar o STS e fornecê-lo de volta ao SQL Server.
Usar autorização de passagem (STS) no SQL Server
O TLS deve ser configurado com certificados entre o SQL Server e o servidor host compatível com o S3. Presume-se que todas as conexões serão transmitidas com segurança por HTTPS, não HTTP. O ponto de extremidade será validado por um certificado instalado no host do sistema operacional SQL Server. Há suporte para certificados públicos ou autoassinados.
Crie uma credencial com âmbito de base de dados que será usada para transmitir a identidade para o armazenamento de objetos compatível com o S3. Para obter mais informações, consulte CREATE DATABASE SCOPED CREDENTIAL. Como o exemplo a seguir:
CREATE DATABASE SCOPED CREDENTIAL CredName WITH IDENTITY = 'User Identity'Crie uma fonte de dados externa para acessar o armazenamento de objetos compatível com o S3. Use
CONNECTION_OPTIONS, como formato JSON, para informar as informações necessárias para o ADFS e STS. Para obter mais informações, consulte CREATE EXTERNAL DATA SOURCE. Como o exemplo a seguir:CREATE EXTERNAL DATA SOURCE EdsName WITH { LOCATION = 's3://<hostname>:<port>/<bucket_name>' , CREDENTIAL = <CredName> [ , CONNECTION_OPTIONS = ' { [ , "authorization": { "adfs": { "endpoint": "http[s]://hostname:port/servicepath", "relying_party": "SQL Server Relying Party Identifier" }, "sts": { "endpoint": "http[s]://hostname:port/stspath", "role_arn": "Role Arn" [ , "role_session_name": "AD user login" ] -- default value if not provided [ , "duration_seconds": 3600 ] -- default value if not provided [ , "version": "2011-06-15" ] -- default value if not provided [ , "request_parameters": "In request query string format" ] } } ] [ , "s3": { "url_style": "Path" } ] }' ] }
-
ADFSopções especificam o ponto de extremidade de transporte do Windows erelying_partyidentificador do SQL Server no ADFS. -
STSopções especificam o ponto de extremidade STS compatível com o S3 para armazenamento de objetos e os parâmetros para a solicitaçãoAssumeRoleWithWebIdentity. OAssumeRoleWithWebIdentityé o método usado para adquirir a credencial de segurança temporária usada para autenticar. Para obter a lista completa de parâmetros, incluindo os opcionais, e informações sobre valores padrão, consulte STS API Reference.
Usar autorização de passagem direta (STS) com o Active Directory
- Marque as propriedades das contas de usuário do SQL Server no AD como não confidenciais para permitir a passagem para o armazenamento compatível com o S3.
- Permitir a delegação restrita do Kerberos aos serviços ADFS para o utilizador relacionado com o SPN (Nomes da Entidade de Serviço) do SQL Server.
Usar autorização de passagem (STS) com o Serviço de Federação do Active Directory
- Habilite o SQL Server para ser um de confiança do provedor de declarações no Active Directory.
- Permitir a autenticação de janelas da intranet como método de autenticação para o ADFS.
- Ative o ponto de extremidade do serviço de transporte do Windows na sua intranet.
- Habilite os pontos de extremidade OIDC (OpenID Connect).
- Registe o SQL Server como um trust de parte confiável .
- Forneça um identificador exclusivo.
- Defina regras de declarações para JWT (JSON Web Token).
- Declarações personalizadas - Essas declarações podem ser adicionadas pelos clientes se forem necessárias para determinar a política de acesso no lado do armazenamento.
- Para obter mais informações específicas do fornecedor, consulte seu provedor de plataforma compatível com o S3.
Usar autorização de passagem (STS) no armazenamento de objetos compatíveis com S3
Siga a documentação fornecida pelo provedor de armazenamento compatível com o S3 para configurar o provedor de identidade OIDC externo. Para configurar o provedor de identidade, geralmente são necessários os valores seguintes.
- Endpoint de configuração do fornecedor OIDC.
- Impressão digital do provedor OIDC.
- Autorização de passagem para armazenamento de objetos compatível com o S3
Limitações da autorização de passagem (STS)
- A autorização de passagem (STS) para o armazenamento de objetos compatível com o S3 é suportada para logons do SQL Server com autenticação do Windows.
- Os tokens STS não podem ser usados para BACKUP para URL para armazenamento de objetos compatíveis com o S3.
- O ADFS e o SQL Server devem estar no mesmo domínio. O ponto de extremidade de transporte do Windows ADFS deve ser desativado na extranet.
- ADFS deve ter o mesmo AD (Active Directory) que o SQL Server como provedor de confiança de declarações.
- O armazenamento compatível com o S3 deve ter o serviço de ponto de extremidade STS, permitindo que os clientes solicitem credenciais temporárias através do JWT de identidades externas.
- As consultas OPENROWSET e CETAS (Create External Table as Select) são suportadas para os formatos parquet e CSV.
- Por padrão, o tempo de renovação do tíquete Kerberos é de sete dias e o tempo de vida é de 10 horas no Windows e 2 horas no Linux. O SQL Server renova o token Kerberos do usuário em até sete dias. Após sete dias, o ticket do usuário expira, portanto, a passagem para o armazenamento compatível com o S3 falhará. Nesse caso, o SQL Server deve reautenticar o usuário para obter um novo ticket Kerberos.
- O ADFS 2019 com Windows Server 2019 é suportado.
- As chamadas à API REST do S3 usam a assinatura da AWS versão 4.
PolyBase no SQL Server no Linux
Para o PolyBase no SQL Server no Linux, é necessária mais configuração.
- O TLS deve ser configurado. Presume-se que todas as conexões serão transmitidas com segurança por HTTPS e não HTTP. O ponto de extremidade é validado por um certificado instalado no host do sistema operacional SQL Server.
- O gerenciamento de certificados é diferente no Linux. Revise e siga a configuração detalhada em suporte Linux para armazenamento compatível com S3.
Conteúdo relacionado
- Virtualização de dados com PolyBase no SQL Server
- Configurar o PolyBase para acessar dados externos em de armazenamento de objetos compatíveis com o S3
- Virtualizar o ficheiro parquet num armazenamento de objetos compatível com S3 com o PolyBase
- Transact-SQL de referência do PolyBase