CRIAR CREDENCIAL (Transact-SQL)
Aplica-se a:SQL ServerAzure SQL Managed Instance
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 senha do Windows. Por exemplo, salvar um backup de banco de dados em algum 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 tornar a credencial no nível do banco de dados, use CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Crie uma credencial de nível de servidor com CREATE CREDENTIAL
quando precisar usar a mesma credencial para vários bancos de dados no servidor.
- Crie uma credencial com escopo de banco de dados com
CREATE DATABASE SCOPED CREDENTIAL
para tornar o banco de dados mais portátil. Quando um banco de dados é movido para um novo servidor, a credencial de escopo do banco de dados será movida com ele. - Use credenciais com escopo de banco de dados no Banco de dados SQL.
- Use credenciais de escopo de banco de dados com PolyBase e recursos virtualização de dados da Instância Gerenciada SQL do Azure.
Transact-SQL convenções de sintaxe
Sintaxe
CREATE CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
[ , SECRET = 'secret' ]
[ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]
Argumentos
credential_name
Especifica o nome da credencial que está sendo criada. credential_name não pode começar com o sinal de número (#). As credenciais do sistema começam com ##.
Importante
Ao usar uma assinatura de acesso compartilhado (SAS), esse nome deve corresponder ao caminho do contêiner, começar com https e não deve conter uma barra para frente. Ver exemplo D.
Quando usada para backup/restauração usando uma para plataformas de dados externas, como o Armazenamento de Blob do Azure ou plataformas compatíveis com o S3, a tabela a seguir fornece caminhos comuns:
Fonte de dados externa | Caminho da localização | Exemplo |
---|---|---|
Armazenamento de Blob do Azure (V2) | https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> |
Exemplo D. |
Armazenamento de objetos compatível com S3 | - Armazenamento compatível com S3: s3://<server_name>:<port>/ - AWS S3: s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder> ou s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder> |
Exemplo F. |
IDENTIDADE ='identity_name'
Especifica o nome da conta a ser usada ao se conectar fora do servidor. Quando a credencial é usada para acessar o Cofre da Chave do Azure, a IDENTITY
Importante
A Base de Dados SQL do Azure suporta apenas identidades do Cofre da Chave do Azure e da Assinatura de Acesso Partilhado. Não há suporte para identidades de usuário do Windows.
SECRET ='segredo'
Especifica o segredo necessário para a autenticação de saída.
Quando a credencial é usada para acessar o Cofre de Chaves do Azure, o argumento
PARA PROVEDOR DE CRIPTOGRAFIA cryptographic_provider_name
Especifica o nome de um Enterprise Key Management Provider (EKM). Para obter mais informações sobre o Gerenciamento de Chaves, consulte Gerenciamento Extensível de Chaves (EKM).
Comentários
Quando IDENTITY é um usuário do Windows, o segredo pode ser a senha. O segredo é criptografado usando a chave mestra de serviço. Se a chave mestra de serviço for regenerada, o segredo será criptografado novamente usando a nova chave mestra de serviço.
Depois de criar uma credencial, você pode mapeá-la para um logon do SQL Server usando CREATE LOGIN ou ALTER LOGIN. Um logon do SQL Server pode ser mapeado para apenas 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 só pode ser mapeada para um login, não para um usuário do banco de dados.
As informações sobre credenciais são visíveis no sys.credentials exibição de catálogo.
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 login pode ter várias credenciais mapeadas para ele, desde que sejam usadas com provedores distintos. Deve haver apenas uma credencial mapeada por provedor por login. A mesma credencial pode ser mapeada para outros logins.
Permissões
Requer ALTERAR QUALQUER CREDENCIAL permissão.
Exemplos
Um. Criando uma credencial para a identidade do Windows
O exemplo a seguir cria a credencial chamada AlterEgo
. A credencial contém o Mary5
de usuário do Windows e uma senha.
CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5',
SECRET = '<EnterStrongPasswordHere>';
GO
B. Criando uma credencial para EKM
O exemplo a seguir usa uma conta criada anteriormente chamada User1OnEKM
em um módulo EKM por meio das ferramentas de gerenciamento do EKM, com um tipo de conta básica e senha. A conta sysadmin no servidor cria uma credencial que é usada para se conectar à conta EKM e a atribui à conta do User1
SQL 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 para EKM usando o Cofre da Chave do Azure
O exemplo a seguir cria uma credencial do SQL Server para o Mecanismo de Banco de Dados usar ao acessar o Cofre da Chave do Azure usando o SQL Server Connector for Microsoft Azure Key Vault. Para obter um exemplo completo de como usar o SQL Server Connector, consulte Extensible Key Management Using Azure Key Vault (SQL Server).
Importante
O argumento IDENTITY de CREATE CREDENTIAL requer o nome do cofre de chaves. O argumento SECRET de CREATE CREDENTIAL requer que o <ID do Cliente> (sem hífenes) e <> Secret sejam passados juntos sem um espaço entre eles.
No exemplo a seguir, o de ID do Cliente
USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
WITH IDENTITY = 'ContosoKeyVault',
SECRET = '11111111222233334444555555555555SECRET_DBEngine'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
O exemplo a seguir cria a mesma credencial usando variáveis para o de ID do Cliente do
DECLARE @AuthClientId uniqueidentifier = '11111111-AAAA-BBBB-2222-CCCCCCCCCCCC';
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é versão atual e Instância Gerenciada SQL do Azure.
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, em seguida, criar uma credencial usando a assinatura de acesso compartilhado, consulte Tutorial: Usar o Armazenamento de Blobs do Microsoft Azure com bancos de dados do SQL Server.
Importante
O argumento CREDENTIAL NAME requer que o nome corresponda ao caminho do contêiner, comece com https e não contenha uma barra à direita. O argumento IDENTITY requer o nome, ASSINATURA DE ACESSO COMPARTILHADO. O argumento SECRET requer o token de assinatura de acesso compartilhado.
O segredo ASSINATURA DE ACESSO COMPARTILHADO não deve ter o principal?.
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. Criando uma credencial para Identidade Gerenciada
O exemplo a seguir cria a credencial que representa a Identidade Gerenciada do serviço SQL do Azure ou do Azure Synapse. Senha e segredo não são aplicáveis neste caso.
CREATE CREDENTIAL ServiceIdentity WITH IDENTITY = 'Managed Identity';
GO
F. Criar uma credencial para backup/restauração para armazenamento compatível com S3
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores
O padrão aberto compatível com o S3 fornece caminhos de armazenamento e detalhes que podem diferir com base na plataforma de armazenamento. Para obter mais informações, consulte backup do SQL Server para URL para armazenamento de objetos compatíveis com o S3.
Para a maioria dos armazenamentos compatíveis com o S3, este exemplo cria uma credencial no nível do servidor e executa uma BACKUP TO URL
.
USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>';
GO
BACKUP DATABASE [SQLTestDB]
TO URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH FORMAT /* overwrite any existing backup sets */
, STATS = 10
, COMPRESSION;
No entanto, o AWS S3 oferece suporte a dois padrões diferentes de URL.
-
S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER>
(padrão) S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>
Há várias abordagens para criar com êxito uma credencial para o AWS S3:
Forneça o nome do bucket, o caminho e a região no nome da credencial.
-- S3 bucket name: datavirtualizationsample -- S3 bucket region: us-west-2 -- S3 bucket folder: backup CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup] WITH IDENTITY = 'S3 Access Key' , SECRET = 'accesskey:secretkey'; GO BACKUP DATABASE [AdventureWorks2022] TO URL = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak' WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520; GO
Ou,
CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup] WITH IDENTITY = 'S3 Access Key' , SECRET = 'accesskey:secretkey'; GO BACKUP DATABASE [AdventureWorks2022] TO URL = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak' WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520; GO
Ou forneça o nome do bucket e o caminho no nome da credencial, mas parametrize a região dentro de cada comando
BACKUP
/RESTORE
. Use a cadeia de caracteres de região específica do S3 noBACKUP_OPTIONS
eRESTORE_OPTIONS
, por exemplo,'{"s3": {"region":"us-west-2"}}'
.-- S3 bucket name: datavirtualizationsample -- S3 bucket region: us-west-2 -- S3 bucket folder: backup CREATE CREDENTIAL [s3://datavirtualizationsample.s3.amazonaws.com/backup] WITH IDENTITY = 'S3 Access Key' , SECRET = 'accesskey:secretkey'; GO BACKUP DATABASE [AdventureWorks2022] TO URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak' WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER) , COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520; GO RESTORE DATABASE AdventureWorks2022_1 FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak' WITH MOVE 'AdventureWorks2022' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf' , MOVE 'AdventureWorks2022_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf' , STATS = 10, RECOVERY , REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER) GO
Conteúdo relacionado
- Credenciais (Mecanismo de Banco de Dados)
- ALTER CREDENTIAL (Transact-SQL)
- DROP CREDENTIAL (Transact-SQL)
- CRIAR CREDENCIAL DE ESCOPO DE BANCO DE DADOS (Transact-SQL
- CRIAR LOGIN (Transact-SQL)
- ALTER LOGIN (Transact-SQL)
- sys.credentials (Transact-SQL)
- Lição 2: Criar uma credencial do SQL Server usando uma assinatura de acesso compartilhado
- Assinaturas de acesso compartilhado