SQL Server - 错误18456,4064和4060

时间:2017-10-05 21:20:43

标签: c# sql-server vb.net

我有一个用vb.net编写的Windows应用程序。它与SQL Server交互,我们可以在服务器上从中创建用户。从应用程序我禁用了一些用户(它在后台运行 DROP USER(loginName)命令)。在这种情况下处理SqlException时发现了一些奇怪的行为。在尝试使用已禁用的用户登录SQL服务器(通过代码和SQL服务器管理工​​作室)时,对于某些用户而言,它提供了4064错误代码,而对于其他用户则提供了18456错误代码。

以下是一些更多细节:

  1. SQL Server版本 - 2016 SP1 。混合模式身份验证。
  2. 除了master之外还有几个DB。
  3. 在sys.syslogins表中的SQL Server上 - 对于我收到4064错误的用户,默认数据库是 主。对于那些默认DB不是主人的人,我得到了18456错误。
  4. 在代码中 - 出于某种原因,在代码中捕获SqlException时,为 用户在登录SQL时出现4064错误,我得到4060错误。对于 用户使用18456代码,它工作正常,我得到相同的错误代码 异常。
  5. 条目位于sys.syslogins,sys.sysusers表中(就sys而言) 桌子去)。
  6. 根据官方说明:

    MSSQLSERVER_4064

      

    由于SQL Server登录有问题,因此无法连接   默认数据库。数据库本身无效或登录缺乏   对数据库的CONNECT权限。

    MSSQLSERVER_18456

      

    当由于涉及错误密码或用户名的身份验证失败而拒绝连接尝试时,会向客户端返回类似于以下内容的消息:"用户登录失败'&#39 ;。 (Microsoft SQL Server,错误:18456)"。

    找不到除this以外的4060的官方详细说明:

      

    无法打开数据库"%。* ls"登录请求。登录失败。

    有几个论坛说它与登录失败有关。我试着找一些关于这3个代码的失败性质差异的数据,但是找不到。

    我们可以获得4064或4060代码的场景是什么?是否有任何重叠的失败案例,我们可以获得其中任何一个(如18456和4060)?

    编辑:以下是创建连接的代码:

    connection = new SqlConnection()
    Dim builder As New SqlConnectionStringBuilder
    builder.DataSource = "localhost"
    builder.InitialCatalog = "DatabaseA"
    builder.ConnectTimeout = 120
    builder.UserID = username
    builder.Password = Encrypt(password)
    connection.ConnectionString = builder.ConnectionString
    

0 个答案:

没有答案