CREATE CREDENTIAL (Transact-SQL)

Aplica-se a:yesSQL Server (todas as versões com suporte) YesInstância Gerenciada de SQL do Azure

Cria uma credencial no nível do servidor. Uma credencial é um registro que contém as informações de autenticação necessárias para se conectar a um recurso fora do SQL Server. A maioria das credenciais inclui um usuário e uma senha do Windows. Por exemplo, salvar um backup de banco de dados em um local pode exigir que o SQL Server forneça credenciais especiais para acessar esse local. Para obter mais informações, consulte Credenciais (Mecanismo de Banco de Dados).

Observação

Para criar a credencial no nível do banco de dados, use CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Use uma credencial no nível do servidor quando precisa usar a mesma credencial para vários bancos de dados no servidor. Use uma credencial no escopo do banco de dados para tornar o banco de dados mais portátil. Quando um banco de dados for movido para um novo servidor, a credencial no escopo do banco de dados será movida com ele. Use as credenciais no escopo do Banco de Dados SQL.

Topic link iconConvenções de sintaxe do Transact-SQL

Sintaxe

CREATE CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
        [ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]

Observação

Para ver a sintaxe do Transact-SQL para o SQL Server 2014 e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

credential_name Especifica o nome da credencial que está sendo criada. credential_name não pode começar com a tecla jogo da velha (#). As credenciais de sistema começam com ##.

Importante

Ao usar uma SAS (assinatura de acesso compartilhado), esse nome deve corresponder ao caminho do contêiner, começar com https e não deve conter uma barra "/". Confira o exemplo D.

IDENTITY ='identity_name' Especifica o nome da conta a ser usada ao se conectar fora do servidor. Quando a credencial é usada para acessar o Azure Key Vault, o IDENTITY é o nome do cofre de chaves. Veja o exemplo C a seguir. Quando a credencial usa uma SAS (assinatura de acesso compartilhado), a IDENTITY é SHARED ACCESS SIGNATURE. Veja o exemplo D abaixo.

Importante

O Banco de dados SQL do Azure é compatível apenas as identidades do Azure Key Vault e com Assinatura de Acesso Compartilhado. Não há suporte para identidades de usuário do Windows.

SECRET ='secret' Especifica o segredo necessário para a autenticação de saída.

Quando a credencial é usada para acessar o Azure Key Vault, o argumento SECRET de CREATE CREDENTIAL exige que a <Client ID>>(sem hifens) e o < Segredo>de umaEntidade de Serviço no Azure Active Directory sejam passados juntos sem um espaço entre eles. Veja o exemplo C a seguir. Quando a credencial usa uma assinatura de acesso compartilhado, o SECRET é o token de assinatura de acesso compartilhado. Veja o exemplo D abaixo. Confira informações sobre como criar uma política de acesso armazenado e uma assinatura de acesso compartilhado em um contêiner do Azure na Lição 1: Criar uma política de acesso armazenado e uma Assinatura de Acesso Compartilhado em um contêiner do Azure.

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name Especifica o nome de um provedor EKM (Gerenciamento Extensível de Chaves) . Para obter mais informações sobre o Gerenciamento de Chaves, confira EKM (Gerenciamento Extensível de Chaves).

Comentários

Quando IDENTITY for um usuário do Windows, o segredo poderá ser a senha. O segredo é criptografado com a chave mestre de serviço. Se a chave mestre de serviço for gerada novamente, o segredo será criptografado novamente com a nova chave mestre de serviço.

Depois de criar uma credencial, mapeie-a para um logon do SQL Server usando CREATE LOGIN ouALTER LOGIN. Um logon do SQL Server pode ser mapeado somente para uma credencial, mas uma única credencial pode ser mapeada para vários logons do SQL Server. Para obter mais informações, consulte Credenciais (Mecanismo de Banco de Dados). Uma credencial no nível do servidor pode ser mapeada apenas para um logon, não para um usuário de banco de dados.

As informações sobre as credenciais são visíveis na exibição do catálogo sys.credentials.

Se não houver nenhuma credencial mapeada de logon para o provedor, a credencial mapeada para a conta de serviço do SQL Server será usada.

Um logon pode ter várias credenciais mapeadas, contanto que elas sejam usadas com provedores diferentes. Deve haver só uma credencial mapeada por provedor por logon. A mesma credencial pode ser mapeada para outros logons.

Permissões

Exige a permissão ALTER ANY CREDENTIAL.

Exemplos

a. Como criar uma credencial para a identidade do Windows

O exemplo a seguir cria a credencial chamada AlterEgo. A credencial contém o usuário do Windows Mary5 e uma senha.

CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';
GO

B. Criando uma credencial para o EKM

O exemplo a seguir usa uma conta já criada chamada User1OnEKM em um módulo de EKM por meio das ferramentas de gerenciamento de EKM, com um tipo de conta e uma senha básicos. A conta sysadmin no servidor cria uma credencial usada para se conectar à conta da EKM e atribui essa credencial à conta User1SQL Server:

CREATE CREDENTIAL CredentialForEKM
    WITH IDENTITY='User1OnEKM', SECRET='<EnterStrongPasswordHere>'
    FOR CRYPTOGRAPHIC PROVIDER MyEKMProvider;
GO

/* Modify the login to assign the cryptographic provider credential */
ALTER LOGIN User1
ADD CREDENTIAL CredentialForEKM;

C. Criando uma credencial de EKM usando a Chave do Cofre do Azure

O exemplo a seguir cria uma credencial SQL Server para o Mecanismo de Banco de Dados usar ao acessar o Azure Key Vault com o Conector do SQL Server para Microsoft Azure Key Vault. Para obter um exemplo completo de como usar o Conector SQL Server, confira Gerenciamento Extensível de Chaves Usando o Key Vault do Azure (SQL Server).

Importante

O argumento IDENTITY de CREATE CREDENTIAL requer o nome da chave de cofre. O argumento SECRET de CREATE CREDENTIAL exige que a <Client ID>> (sem hifens) e o <Secret> sejam passados juntos sem um espaço entre eles.

No exemplo a seguir, a ID do cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) não tem hifens e foi inserida como a cadeia de caracteres EF5C8E094D2A4A769998D93440D8115D , e Secret é representado pela cadeia de caracteres SECRET_DBEngine.

USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault',
    SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;

O exemplo a seguir cria a mesma credencial usando variáveis para as cadeias de caracteres Client ID e Secret, que, em seguida, são concatenadas para formar o argumento SECRET. A função REPLACE é usada para remover os hifens da ID do Cliente.

DECLARE @AuthClientId uniqueidentifier = 'EF5C8E09-4D2A-4A76-9998-D93440D8115D';
DECLARE @AuthClientSecret varchar(200) = 'SECRET_DBEngine';
DECLARE @pwd varchar(max) = REPLACE(CONVERT(varchar(36), @AuthClientId) , '-', '') + @AuthClientSecret;

EXEC ('CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault', SECRET = ''' + @PWD + '''
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;');

D. Criando uma credencial usando um token SAS

Aplica-se a: SQL Server 2014 (12.x) até aversão atual e à Instância Gerenciada do Azure SQL.

O exemplo a seguir cria uma credencial de assinatura de acesso compartilhado usando um token SAS. Para obter um tutorial sobre como criar uma política de acesso armazenado e uma assinatura de acesso compartilhado em um contêiner do Azure e criar uma credencial usando a assinatura de acesso compartilhado, confira Tutorial: Usaro Serviço de Armazenamento de Blobs do Microsoft Azure com bancos de dados SQL Server 2016.

Importante

O argumento CREDENTIAL NAME exige que o nome corresponda ao caminho do contêiner, comece com https e não contenha uma barra "/" à direita. O argumento IDENTITY exige o nome, SHARED ACCESS SIGNATURE. O argumento SECRET exige o token de assinatura de acesso compartilhado.

O segredo de SHARED ACCESS SIGNATURE não deve ter ? à esquerda.

USE master
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a trailing forward slash.
    WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and do not change it.
    , SECRET = 'sharedaccesssignature' -- this is the shared access signature token
GO

E. Como criar uma credencial para a identidade gerenciada

O exemplo a seguir cria a credencial que representa a identidade gerenciada do SQL do Azure ou do serviço Azure Synapse. A senha e o segredo não são aplicáveis nesse caso.

CREATE CREDENTIAL ServiceIdentity WITH IDENTITY = 'Managed Identity';
GO

Consulte Também