与 SQL 服务器的连接突然停止工作

Connection to SQL server suddenly stopped working

我以前让它工作过。我所做的唯一更改是通过生成脚本并将其导入服务器来导出数据库。

Web 服务器:IIS / ASP.NET 网络应用程序
连接字符串:

  <add key="ConnectionString" value="Data Source=SERVER; 
Initial Catalog=tkl;Persist Security Info=True;
User ID=tkl;Password=PASS; Connection Lifetime=150; 
Connect Timeout=150; Pooling=true;Min Pool Size=20;Max Pool Size=500" />

错误:

  2020-09-27 05:23:44.6361|ERROR|System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "tkl" requested by the login. The login failed.
    Login failed for user 'tkl'.
       at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)

用户 'tkl' 存在于 TKL 数据库和 SQL 服务器上。 我不确定这里出了什么问题。可能我需要设置一些权限。 感谢任何帮助。

更新:

SQL 日志:

Login failed for user 'tkl'. Reason: Failed to open the explicitly specified database 'tkl'. [CLIENT: ]

windows 和 SQL 身份验证都已启用。 我也可以尝试 post 'tkl' 用户对象权限。

错误告诉您 LOGIN 无法访问您尝试连接的数据库。仅仅因为数据库有一个 USER 与服务器上的 LOGIN 同名,并不意味着 LOGIN 可以访问该数据库。

USER 对象通过 SID 映射到 LOGIN 对象, 而不是 名称。这意味着您可以有 2 个对象,不同名称相互映射,2 个具有相同名称 not 的对象相互映射。

很有可能,在这里,您只需要 ALTER USER 来更正映射:

USE YourDatabase;
GO

ALTER USER tkl WITH LOGIN = tkl;