代码之家  ›  专栏  ›  技术社区  ›  SabrinaMH

SQL Server身份验证在不同的服务帐户下表现不同

  •  1
  • SabrinaMH  · 技术社区  · 7 年前

    我有一个应用程序,需要在Windows上以给定的服务帐户运行。NET应用程序连接到MSSQL数据库,我在连接字符串中指定了使用的SQL server身份验证,即

    <add name="conn" connectionString="Data Source=(localdb)\MSSQLLocalDB;initial catalog=MyDB;User Id=testuser;Password=xxx" providerName="System.Data.SqlClient" />
    

    (运行服务时也会发生同样的情况)。

    我已经花了一天多的时间研究这个问题,所以如果有人有什么想法可能是错误的,我将非常感谢。

    SQL server日志中的错误消息为

    07/12/2017 12:18:32,Logon,Unknown,Login failed for user 'testuser'. Reason: 
    Could not find a login matching the name provided. [CLIENT: <named pipe>]
    07/12/2017 12:18:32,Logon,Unknown,Error: 18456<c/> Severity: 14<c/> State: 5.
    

    但是,如果我使用我的域帐户登录到SSMS,则“testuser”列在“安全”下-->登录。

    当我尝试启动服务时,发生的SQL异常是

    System.Data.SqlClient。SqlException(0x80131904):用户“testuser”登录失败。 在System.Data.SqlClient.SqlInternalConnectionDS(DbConnectionPoolIdentity、SqlConnectionString connectionOptions、SqlCredential凭据、Object providerInfo、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、DbConnectionPool池、String accessToken、Boolean applyTransientFaultHandling)

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jeroen Mostert    7 年前

    (localdb) 对于特定用户来说是本地的。使用 sqllocaldb share (从提升的命令提示符)公开跨用户可用的实例:

    sqllocaldb share MSSQLLocalDB SharedLocalDB
    

    sqllocaldb stop MSSQLLocalDB
    sqllocaldb start MSSQLLocalDB
    

    现在,您可以通过以下方式连接到共享实例: (localdb)\.\SharedLocalDB .\ ).