Configurei consultas de banco de dados elástico do Azure antes usando o seguinte nos bancos de dados PaaS do Azure:
No banco de dados da fonte de dados:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<encryption key>';
GO
CREATE DATABASE SCOPED CREDENTIAL CRED_Azure_Login
WITH IDENTITY = 'SomeUser', SECRET = '<Some password>'
GO
Esta execução, sem problemas e posso ver a credencial criada ao olhar para sys.database_scoped_credentials. Então parece que a fonte está boa.
No banco de dados de destino:
CREATE EXTERNAL DATA SOURCE Source_AzureDatabase
WITH
(
TYPE=RDBMS,
LOCATION='<DB location>.database.windows.net',
DATABASE_NAME='SourceDBName',
CREDENTIAL= CRED_Azure_Login
);
Isso costumava funcionar bem, mas recebo o seguinte erro:
Msg 46516, Level 16, State 26, Line 1
The specified credential cannot be found or the user does not have permission to perform this action.
Estou usando o logon de administrador no banco de dados de destino (alterei o logon de administrador por meio da página Visão geral do Portal do Azure para o banco de dados e fiz login novamente, só para ter certeza). A documentação diz que você precisa da permissão CONTROL no banco de dados, então isso não deve ser um problema. Como configurei com sucesso a chave mestra e a credencial dos bancos de dados de origem, vincular a ela não deve ser um problema.
Alguém pode tentar isso para ver se sou só eu? Outro DBA revisou o código e não encontrou nenhum problema. Parece que a Microsoft pode ter quebrado esse recurso - alguém pode verificar se pode fazê-lo?
Você precisa criar a credencial com escopo de banco de dados e a fonte de dados externa no mesmo banco de dados (destino).
A IDENTIDADE='' deve ser uma conta que tenha acesso ao banco de dados de origem de onde você deseja consultar, no meu exemplo Test2.
Então, por exemplo, para acessar as tabelas do banco de dados Test2 a partir do banco de dados test, execute tudo isso no banco de dados: Test.
Fonte