应用程序中的Azure SQL数据库“用户登录失败”,但在SSMS中工作正常


14

我想尝试Azure SQL Database V12上包含的数据库用户功能,但是在进行身份验证时遇到问题,这对我来说似乎很奇怪。

我创建了一个名为的数据库Classifier。我将IP添加到了防火墙规则中,以便可以从工作站上的SSMS连接到Azure db服务器。一旦能够通过SSMS进行管理连接,我就尝试将具有密码的用户添加到数据库中,如下所示:

CREATE USER classifier WITH PASSWORD='thepassword'

我还将此用户添加到数据编写者和读取者角色:

exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'

之后,我可以使用来自SSMS的这些凭据连接到数据库:

在此处输入图片说明

但这就是问题的所在:我尝试了几种不同的连接字符串,但似乎无法在我正在开发的Web应用程序中建立连接。它在Azure环境中不起作用,因此我正在localhost上运行,并具有到Azure数据库的连接字符串,并且它将无法连接。这是我目前正在使用的连接字符串:

<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"/>

我尝试过为用户重置密码(通过SSMS),然后更新连接字符串。我还通过将密码直接从此连接字符串中复制并复制到SSMS的“连接”对话框中来仔细检查了密码,以确保那里没有错字。

我在Azure数据库服务器中启用了审核,希望获得有关失败原因的详细信息,但我得到的只是以下内容:

错误18456,级别14,状态1,服务器SQL Azure,第1行登录失败,用户“分类器”

这就是我遇到的问题。通过文档或博客可以找到的大多数内容都表明,要做的事情是查看SQL Server日志,以查看真正的错误状态,这将更狭窄地指示失败的性质,但是由于我就Azure而言,没有办法做到这一点(据我所知)。

是什么会导致应用程序在SSMS(以及附带的LinqPad和Visual Studio Server Explorer)成功的地方失败?

Answers:


15

我们发现,对于包含的数据库/包含的用户,您必须指定:

GRANT CONNECT TO [YOUR_USER]

否则CONNECT默认情况下似乎被吊销。完成上述更改后,就可以访问数据库了。


我们有一个正在运行的现有帐户,然后停止了工作。我不得不再次授予连接权限。
Shane Courtrille

在Azure上,Cannot find the user 'myuser', because it does not exist or you do not have permission.尽管用户名存在于“安全性”>“登录名”下,但没有MyDatabse>“安全性”>“用户”下,但出现错误。我尝试CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GO但遇到错误The login already has an account under a different user name.
Korayem

我有一个类似的问题。在开发环境中,所有内容都可以连接到sql Azure,但是一旦发布,就会抛出该错误。但是,我无法运行命令或创建用户,是否有人尝试其他方法?
里克·席尔瓦

@dezso我正面临类似的问题。我的ADO.NET和EF(DBContext)代码在本地计算机上运行良好(尚未在Azure中尝试过),但是使用IdentityDBConext实现的EF代码失败。我不确定出什么问题或IdentityDBConext的哪些功能需要访问服务器。这是我原来的问题stackoverflow.com/questions/40260720/...
西仁德赛

5

在切换我们的API以通过新的包含的用户连接到Azure数据库时,我们必须更改连接字符串以包括:

Persist Security Info=True;

尽管我不明白为什么需要进行此更改,但我想在此处发布以防将来对其他人有所帮助。

我们最初是从这个问题开始尝试的。


2

我的问题不同,但是又相关:我试图通过使用SQL Server Management Studio(SSMS)和包含的用户来连接到Azure SQL数据库。我在SSMS中收到“用户登录失败”消息。

解决方案:在查询窗口的SSMS连接选项中,我已将“连接到数据库”设置为尝试连接的数据库的名称。

说明:事后看来,原因很明显:只允许包含的用户连接到在其中创建用户的数据库。


介意解释否决票吗?
文斯·霍斯特

1
不是我,但可能是因为您的回答与问题相反。但是仍然有用,并且由于该SSMS对话框的不良设计,容易犯错!
Simon_Weaver

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.