CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Cria uma credencial de banco de dados. Uma credencial de banco de dados não é mapeada para um usuário do banco de dados ou logon do servidor. A credencial é usada pelo banco de dados para acessar o local externo sempre que o banco de dados está executando uma operação que requer acesso.

Convenções de sintaxe de Transact-SQL

Sintaxe

CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
[ ; ]

Argumentos

credential_name

Especifica o nome da credencial no escopo do banco de dados que está sendo criada. credential_name não pode começar com o sinal de número (#). As credenciais do sistema começam com ##. O comprimento máximo de credential_name é de 128 caracteres.

IDENTIDADE = 'identity_name'

Especifica o nome da conta a ser usada ao conectar o servidor externamente.

  • Para importar um arquivo do Armazenamento de Blobs do Azure ou do Azure Data Lake Storage usando uma chave compartilhada, o nome da identidade deve ser SHARED ACCESS SIGNATURE. Para mais informações sobre assinaturas de acesso compartilhado, consulte Usando SAS (Assinatura de Acesso Compartilhado). Somente use IDENTITY = SHARED ACCESS SIGNATURE com uma assinatura de acesso compartilhado.
  • Para importar um arquivo do Armazenamento de Blobs do Azure usando uma identidade gerenciada, o nome de identidade deve ser MANAGED IDENTITY.
  • Quando usar o Kerberos (Windows Active Directory ou MIT KDC), não use o nome de domínio no argumento IDENTITY. Ele deve ser apenas o nome da conta.
  • Na instância do SQL Server, se estiver criando uma credencial no escopo do banco de dados com uma Chave de Acesso de Armazenamento usada como SECRET, IDENTITY será ignorada.
  • WITH IDENTITY não será necessário se o contêiner no armazenamento de Blobs do Azure estiver habilitado para acesso anônimo. Para obter um exemplo de como consultar o armazenamento de Blobs do Azure, confira Importar dados em uma tabela de um arquivo armazenado no Armazenamento de Blobs do Azure.

Importante

A única fonte de dados externa do PolyBase que dá suporte à autenticação Kerberos é o Hadoop. Todas as outras fontes de dados externas (SQL Server, Oracle, Teradata, MongoDB, ODBC genérico) dão suporte apenas à autenticação básica.

  • Para carregar dados no Azure Synapse Analytics, é possível usar qualquer valor válido em IDENTITY.
  • Em um pool de SQL sem servidor do Azure Synapse Analytics, as credenciais no escopo do banco de dados podem especificar uma identidade gerenciada do workspace, o nome da entidade de serviço ou o token SAS (assinatura de acesso compartilhado). O acesso por meio de uma identidade de usuário, habilitada pela autenticação de passagem do Microsoft Entra, também é possível com uma credencial no escopo do banco de dados, assim como o acesso anônimo ao armazenamento disponível publicamente. Para obter mais informações, confira Tipos de autorização de armazenamento com suporte.
  • Em um pool de SQL dedicado do Azure Synapse Analytics, as credenciais no escopo do banco de dados podem especificar o token SAS (assinatura de acesso compartilhado), a identidade do aplicativo personalizado, a identidade gerenciada do workspace ou a chave de acesso de armazenamento.

SEGREDO = 'segredo'

Especifica o segredo necessário para a autenticação de saída. SECRET é necessário para importar um arquivo de armazenamento de Blobs do Azure. Para fazer o carregamento do Armazenamento de Blobs do Azure para o Azure Synapse Analytics ou o Parallel Data Warehouse, o Segredo deve ser a Chave de Armazenamento do Azure.

Aviso

O valor da chave SAS pode começar com um '?' (ponto de interrogação). Quando você usa a chave SAS, deve remover o '?' à esquerda. Caso contrário, seus esforços poderão ser bloqueados.

Comentários

Uma credencial no escopo do banco de dados é um registro que contém as informações de autenticação necessárias para conectar-se a um recurso fora do SQL Server. A maioria das credenciais inclui um usuário e uma senha do Windows.

Para proteger as informações confidenciais dentro da credencial no escopo do banco de dados, é necessária uma chave mestra de banco de dados (DMK). A DMK é uma chave simétrica que criptografa o segredo na credencial no escopo do banco de dados. O banco de dados deve ter uma DMK antes que qualquer credencial no escopo do banco de dados possa ser criada. Uma DMK deve ser criptografada com uma senha forte. O Banco de Dados SQL do Azure criará uma DMK com uma senha forte selecionada aleatoriamente como parte da criação da credencial no escopo do banco de dados ou como parte da criação de uma auditoria de servidor. Os usuários não podem criar a DMK em um banco de dados lógico master . A senha da chave mestra é desconhecida para a Microsoft e não pode ser descoberta após a criação. Por esse motivo, é recomendável criar uma DMK antes de criar uma credencial no escopo do banco de dados. Para obter mais informações, confira CREATE MASTER KEY (Transact-SQL).

Quando IDENTITY for um usuário do Windows, o segredo poderá ser a senha. O segredo é criptografado usando a chave mestra de serviço (SMK). Se o SMK for regenerado, o segredo será criptografado novamente usando o novo SMK.

Ao conceder permissões para SAS (assinaturas de acesso compartilhado) para uso com uma tabela externa do PolyBase, selecione Contêiner e Objeto como tipos de recursos permitidos. Se não for concedido, você poderá receber o erro 16535 ou 16561 ao tentar acessar a tabela externa.

Informações sobre credenciais no escopo do banco de dados ficam visíveis na exibição do catálogo database_scoped_credentials.

Estas são algumas aplicações das credenciais no escopo do banco de dados:

Permissões

Exige a permissão CONTROL no banco de dados.

SQL Server 2022

A partir do SQL Server 2022 (16.x), foi introduzido um novo tipo de conector, usando chamadas à API REST que substituem o HADOOP. No caso do Armazenamento de Blobs do Azure e o Azure Data Lake Gen 2, o único método de autenticação é SHARED ACCESS SIGNATURE.

Para obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.

Exemplos

a. Como criar uma credencial no escopo do banco de dados para seu aplicativo

O exemplo a seguir cria a credencial no escopo do banco de dados chamada AppCred. A credencial no escopo do banco de dados contém o usuário do Windows Mary5 e uma senha.

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL AppCred WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';

B. Como criar uma credencial no escopo do banco de dados para uma Assinatura de Acesso Compartilhado

O exemplo a seguir cria uma credencial no escopo do banco de dados que pode ser usada para criar uma fonte de dados externa, que pode executar operações em massa, como BULK INSERT e OPENROWSET.

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL MyCredentials
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'QLYMgmSXMklt%2FI1U6DcVrQixnlU5Sgbtk1qDRakUBGs%3D';

C. Como criar uma credencial no escopo do banco de dados para a conectividade do PolyBase com o Azure Data Lake Storage

O exemplo a seguir cria uma credencial no escopo do banco de dados que pode ser usada para criar uma fonte de dados externa, que pode ser usada pelo PolyBase no Azure Synapse Analytics.

O Azure Data Lake Store usa um aplicativo Microsoft Entra para autenticação de serviço a serviço.

Crie um aplicativo do Microsoft Entra e documente seu client_id, OAuth_2.0_Token_EndPoint e Key antes de tentar criar uma credencial no escopo do banco de dados.

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL ADL_User
WITH
    IDENTITY = '<client_id>@<OAuth_2.0_Token_EndPoint>',
    SECRET = '<key>'
;