【问题标题】:Connection to SQL server suddenly stopped working与 SQL Server 的连接突然停止工作
【发布时间】:2020-09-27 09:32:56
【问题描述】:

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

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

  <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 Server 中。 我不确定这里有什么问题。可能我需要设置一些权限。 感谢任何帮助。

更新:

SQL 日志:

用户“tkl”登录失败。原因:无法打开明确指定的数据库“tkl”。 [客户:]

windows 和 SQL authentificaiton 均已启用。 我也可以尝试发布“tkl”用户对象权限。

【问题讨论】:

  • 查看SQL Server上的日志,发现真实认证错误。如果您不明白,请将其作为edit 发布在您的问题中。
  • 如果您删除并重新创建了数据库中的所有对象,包括tkl 数据库用户,它可能没有链接到相应的tkl SQL 登录。
  • @AlwaysLearning 提出了一个很好的观点。数据库中的USER 对象tkl 是否链接到LOGIN 服务器对象tkl
  • 实际用户名是 tkl ,与数据库名称相同。用户 tkl 访问数据库需要哪些确切权限?
  • @Jalle 请从日志中获取错误,这将告诉我们确切的问题所在。

标签: sql sql-server iis connection-string


【解决方案1】:

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

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

很可能,在这里,您只需要ALTERUSER 即可更正映射:

USE YourDatabase;
GO

ALTER USER tkl WITH LOGIN = tkl;

【讨论】:

  • 我刚刚运行了该命令,它运行成功。然而,当我运行该应用程序时,它仍然出现错误: System.Data.SqlClient.SqlException (0x80131904): 无法打开登录请求的数据库“tkl”。登录失败。用户“tkl”登录失败。
  • 那么要么该命令没有成功运行,要么你在错误的数据库中运行它。如果您仍然被告知无法打开显式数据库。
  • 最后我通过在服务器级别授予用户所有可能的权限来解决问题
  • 除了所有可能的权限之外,您还可以给它最少 数量的权限来完成它需要履行的角色,@Jalle。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多