现在我正在使用.Net CORE c#和实体框架数据库进行项目,但出现错误
SqlException:此版本的SQL不支持Windows登录名 服务器。
我遵循了一个教程,我认为我做得很好... 唯一的区别是我的数据库托管在Azure上,应该重要吗?
这是我的连接字符串
"DefaultConnection": "Server=firstdb123.database.windows.net;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=true",
这是我的数据库图片
我有Visual Studio制作的EmployeesController和EmployeeContext,所以应该是正确的。.但我不知道为什么它不起作用
任何帮助都会很棒
答案 0 :(得分:4)
看到您的连接字符串中有Trusted_Connection=True;
位吗?这是Windows的快捷方式,可让您绕过服务器上的常规用户名/密码凭据。
您需要创建安全的Azure登录名,然后使用该登录名来指定连接字符串。
This page显示了如何在各种不同的SQL版本中创建连接字符串。
答案 1 :(得分:2)
SQL Server的Windows登录名:
当用户通过Windows用户帐户连接时,SQL Server使用操作系统中的Windows主体令牌来验证帐户名和密码。由于您的SQL数据库是作为Azure托管的,因此在使用Windows登录名连接到SQL Server时,我们必须确保SQL数据库和.Net Core应用程序位于同一域中。
有关Windows身份验证的更多信息,我们可以参考:Connecting Through Windows Authentication
为解决您的问题,我们可以通过传递用户名和密码来使用SQL Server身份验证。
我们可以在门户上设置用户名和密码,如下所示:
我们可以在门户网站上获得连接字符串,如下所示:
然后我们可以在Entity Framework或ADO.NET代码中使用此连接字符串。
答案 2 :(得分:2)
数据库托管在Azure上确实很重要,因为Azure无法访问您的Windows帐户,并且无法验证您是否使用Windows帐户登录。
您可以使用Server admin,但这在要在生产环境中运行事物时不是很安全。
sysadmin固定服务器角色成员可以在服务器中执行任何活动。 https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/server-level-roles?view=sql-server-2017
要解决此问题,您可以使用以下方法创建数据库用户:
CrossPlatformInputManager.GetAxis("Horizontal")
在需要访问的数据库上执行此操作。 创建用户后,您必须为其授予一些权限:
CREATE USER [{username}] WITH PASSWORD=N'{password}'
'db_datareader'授予用户对数据库的只读权限。也许这对于您的用户来说还不够,那么您可以通过使用另一个数据库角色再次执行该语句来为其赋予更多权限。有关数据库角色的更多信息:https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-2017
对于Azure SQL数据库,无法通过SQL Server Management Studio执行此操作。有关此的更多信息:
在您的连接字符串中使用该用户:
EXEC sp_addrolemember 'db_datareader', [{username}];
希望对您有帮助。
答案 3 :(得分:2)
您可以使用Active Directory Integrated
authentication as it is documented连接到Azure SQL。
连接字符串应类似于
connectionString="Server=servername.database.windows.net,1433;Initial Catalog=DatabaseName;Authentication='Active Directory Integrated'"