Sql server “无法打开数据库”;Auth";由登录请求。登录失败。用户';服务器名';

Sql server “无法打开数据库”;Auth";由登录请求。登录失败。用户';服务器名';,sql-server,iis,.net-core,asp.net-identity,Sql Server,Iis,.net Core,Asp.net Identity,我正在.NETCore2.1中开发一个应用程序,我在其中应用aspnet身份用户的身份验证。数据库位于一台服务器上,而我在.net core中的程序位于另一台具有IIS的服务器上。我的程序在本地正常工作,但当我将其部署到服务器并尝试访问我的某个方法以执行登录时,我收到以下错误: 无法打开登录请求的数据库“Auth”。登录失败。用户“[NAME-OF-SERVER-WITH-IIS]”登录失败 奇怪的是,在我的连接字符串中,我指定连接到的用户是“sa” Startup.cs-配置服务方法 publ

我正在.NETCore2.1中开发一个应用程序,我在其中应用aspnet身份用户的身份验证。数据库位于一台服务器上,而我在.net core中的程序位于另一台具有IIS的服务器上。我的程序在本地正常工作,但当我将其部署到服务器并尝试访问我的某个方法以执行登录时,我收到以下错误:

无法打开登录请求的数据库“Auth”。登录失败。用户“[NAME-OF-SERVER-WITH-IIS]”登录失败

奇怪的是,在我的连接字符串中,我指定连接到的用户是“sa”

Startup.cs-配置服务方法

public void ConfigureServices(IServiceCollection services)
    {
        String con = "Data Source=<Servername>;Initial Catalog=Auth;Persist Security Info=True;User ID=sa;Password=<Password>;Trusted_Connection=True;MultipleActiveResultSets=true";
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(con,
          b => b.MigrationsAssembly("Auth")));
    ...
    }
[HttpPost("Login")]
    public async Task<IActionResult> Login([FromBody]CredentialsViewModel credentials)
    {
        try
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            var identity = await GetClaimsIdentity(credentials.UserName, credentials.Password);

            if (identity == null)
                return BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid username or password.", ModelState));

            var jwt = await Tokens.GenerateJwt(identity, jwtFactory, credentials.UserName, jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented });
            return new OkObjectResult(jwt);
        }
        catch (Exception e)
        {
            return new OkObjectResult(e.Message);
        }
    }
public void配置服务(IServiceCollection服务)
{
String con=“数据源=;初始目录=Auth;持久安全信息=True;用户ID=sa;密码=;可信连接=True;MultipleActiveResultSets=True”;
services.AddDbContext(选项=>
选项。使用SQLServer(con,
b=>b.migrationassembly(“Auth”);
...
}
AuthController.cs-登录方法

public void ConfigureServices(IServiceCollection services)
    {
        String con = "Data Source=<Servername>;Initial Catalog=Auth;Persist Security Info=True;User ID=sa;Password=<Password>;Trusted_Connection=True;MultipleActiveResultSets=true";
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(con,
          b => b.MigrationsAssembly("Auth")));
    ...
    }
[HttpPost("Login")]
    public async Task<IActionResult> Login([FromBody]CredentialsViewModel credentials)
    {
        try
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            var identity = await GetClaimsIdentity(credentials.UserName, credentials.Password);

            if (identity == null)
                return BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid username or password.", ModelState));

            var jwt = await Tokens.GenerateJwt(identity, jwtFactory, credentials.UserName, jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented });
            return new OkObjectResult(jwt);
        }
        catch (Exception e)
        {
            return new OkObjectResult(e.Message);
        }
    }
[HttpPost(“登录”)]
公共异步任务登录([FromBody]CredentialsViewModel凭据)
{
尝试
{
如果(!ModelState.IsValid)
返回请求(ModelState);
var identity=await GetClaimsIdentity(credentials.UserName,credentials.Password);
if(identity==null)
返回BadRequest(Errors.AddErrorToModelState(“登录失败”,“用户名或密码无效”,ModelState));
var jwt=wait Tokens.GenerateJwt(标识、jwtFactory、credentials.UserName、jwtOptions、新JsonSerializerSettings{Formatting=Formatting.Indented});
返回新的OkObjectResult(jwt);
}
捕获(例外e)
{
返回新的OkObjectResult(e.Message);
}
}

我不是一名C#开发人员,但我很确定您将SQL Server登录验证和集成安全性混为一谈。您不能传递SQL登录名和密码,而使用
Trusted\u Connection=True
。SQL Server身份验证登录未使用受信任的连接。Larnu是正确的。你要么传递SQL登录凭据,要么让应用程序池作为域帐户进行身份验证,并使用可信连接。在相关说明中,应用程序使用
sysadmin
帐户,创建单独的登录,并仅授予登录所需的权限,这是一个糟糕的想法。没错。这解决了我的问题,这只是我的错误与连接字符串。如果您愿意,您可以将其发布以将其标记为已解决。