Eu queria experimentar o recurso de usuários de banco de dados contido no Banco de Dados SQL do Azure V12, mas estou tendo um problema de autenticação que me parece estranho.
Eu criei um banco de dados chamado Classifier
. Adicionei meu IP às regras de firewall para poder me conectar ao servidor db do Azure a partir do SSMS na minha estação de trabalho. Depois que consegui conectar-me via SSMS para administração, tentei adicionar um usuário com uma senha ao banco de dados, assim:
CREATE USER classifier WITH PASSWORD='thepassword'
Também adicionei esse usuário às funções de gravador e leitor de dados:
exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'
Depois disso, sou capaz de me conectar ao banco de dados com essas credenciais do SSMS:
Mas é aí que as coisas dão errado: tentei vários encantamentos de cadeias de conexão diferentes e parece que não consigo conectar-me a um aplicativo da Web em que estou trabalhando. Como não funcionou no ambiente do Azure, estou executando no host local com uma cadeia de conexão com o banco de dados do Azure e simplesmente não será conectado. Aqui está a cadeia de conexão que estou usando no momento:
<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>
Tentei redefinir a senha (via SSMS) para o usuário e atualizar a string de conexão; Também verifiquei a senha, copiando-a diretamente desta cadeia de conexão e para a caixa de diálogo de conexão no SSMS, para garantir que não houvesse um erro de digitação.
Habilitei a auditoria no servidor db do Azure na esperança de obter alguns detalhes sobre o motivo da falha, mas tudo o que recebo é o seguinte:
E é aqui que estou preso. A maior parte do que consegui encontrar por meio de documentação ou blogs indica que a coisa a fazer é olhar para os logs do SQL Server para ver qual é o verdadeiro estado do erro que indicaria mais estritamente a natureza da falha, mas desde que eu Como estou lidando com o Azure, não há como fazer isso (tanto quanto eu sei).
O que poderia causar a falha do aplicativo onde o SSMS (e o LinqPad e o Visual Studio Server Explorer, aliás) são bem-sucedidos?
fonte
Cannot find the user 'myuser', because it does not exist or you do not have permission.
embora o nome de usuário exista em Segurança> Logins, mas não em MyDatabse> Segurança> Usuários. Eu tenteiCREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GO
, mas obteve o erroThe login already has an account under a different user name.
Ao mudar nossa API para conectar-se a um banco de dados do Azure por meio de um novo usuário contido, tivemos que alterar nossa cadeia de conexão para incluir:
Embora eu não entenda por que essa alteração foi necessária, eu queria postar aqui, caso isso ajude alguém no futuro.
Originalmente, tentamos fazer isso com essa pergunta .
fonte
Meu problema era diferente, mas relacionado: eu estava tentando conectar-me a um banco de dados SQL do Azure usando o SQL Server Management Studio (SSMS) com um usuário contido . Eu estava recebendo uma mensagem "Falha no login do usuário" no SSMS.
Solução: nas opções de conexão SSMS da janela de consulta, eu havia definido "Conectar ao banco de dados" como o nome do banco de dados ao qual estava tentando conectar.
Explicação: Em uma retrospectiva, o motivo era óbvio: os usuários contidos só podem se conectar aos bancos de dados nos quais foram criados.
fonte
Isso pode ocorrer se você executar um comando do Powershell que contenha uma cadeia de conexão quando sua senha contiver
$
. Você pode contornar isso encerrando a cadeia de conexão com aspas simples - ou não armazenando sua senha na cadeia de conexão em primeiro lugar ;-)Por exemplo. Corri para isso com o
Scaffold-DbContext
comandohttps://github.com/aspnet/EntityFrameworkCore/issues/6624
fonte