用户 '' 登录失败,无法打开登录请求的数据库“Database1.mdf”。登录失败。用户 'rBcollo-PC\rBcollo' 登录失败

Posted

技术标签:

【中文标题】用户 \'\' 登录失败,无法打开登录请求的数据库“Database1.mdf”。登录失败。用户 \'rBcollo-PC\\rBcollo\' 登录失败【英文标题】:Login failed for user '' and Cannot open database "Database1.mdf" requested by the login. The login failed. Login failed for user 'rBcollo-PC\rBcollo'用户 '' 登录失败,无法打开登录请求的数据库“Database1.mdf”。登录失败。用户 'rBcollo-PC\rBcollo' 登录失败 【发布时间】:2016-09-06 21:09:27 【问题描述】:

所以..我几乎解决了所有问题。但现在我处理另一个问题。 我使用了这个连接字符串:

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Database=Database1.mdf");

它会抛出下一个错误:

用户登录失败

如果我删除 .mdf 扩展名,它会抛出相同的错误

现在,如果我将以下内容添加到字符串中:

Integrated Security = true

它抛出这个:

无法打开登录请求的数据库“Database1.mdf”。登录失败。 用户 'rBcollo-PC\rBcollo' 登录失败。

P.S for Integrated Security = false 它会抛出“用户登录失败”

问题是我没有为数据库使用任何用户名或密码。

有什么帮助吗?

【问题讨论】:

"问题是我没有为数据库使用任何用户名或密码" 你能解释一下吗? SQL 需要安全性,通过 Windows 帐户或 SQL 用户名/密码。你是说你不使用用户名现在还是你不想想要 @DStanley link 这是高级数据库设置的照片。并且用户名和密码字段是空的。这是否意味着我没有使用任何类型的用户名或密码作为数据库? 【参考方案1】:

注意:如果您将EntityFramework CoreSQL Server 一起使用,我的回答将适用

此错误可能是因为“Database does not exist”和应用程序尝试执行数据库操作。

在执行任何数据库操作之前,您只需要使用以下行。

_context.Database.EnsureCreated(); 

EnsureCreated 是什么?

    // Summary:
    //     Ensures that the database for the context exists. If it exists, no action is
    //     taken. If it does not exist then the database and all its schema are created.
    //     If the database exists, then no effort is made to ensure it is compatible with
    //     the model for this context.
    //     Note that this API does not use migrations to create the database. In addition,
    //     the database that is created cannot be later updated using migrations. If you
    //     are targeting a relational database and using migrations, you can use the DbContext.Database.Migrate()
    //     method to ensure the database is created and all migrations are applied.
    //
    // Returns:
    //     True if the database is created, false if it already existed.

【讨论】:

我在 EF6 的上下文构造函数中有 db 初始化程序,并且必须在构造函数中的 dbinitialiser 之前调用 Database.CreateIfNotExists(); EnsureCreated 创建的数据库以后不能使用迁移更新!所以最好使用Migrate(),如图所示here【参考方案2】:

如果您设置 Integrated Security = true ,那么系统将尝试使用您当前的 Windows 凭据登录到数据库。如果您没有明确授予数据库中当前用户的权限,那么这将不起作用。

如果您设置 Integrated Security = false 或根本没有 Integrated Security 选项,那么您需要提供用户名和密码。

Data Source=.\SQLEXPRESS;Database=Database1.mdf;User Id=myUsername;
Password=myPassword;

您没有使用用户名或密码的声明没有任何意义。您必须在数据库上有用户名和密码。

【讨论】:

Image -> link Well.I can't see any username or password associated with my database 在 SQL Management Studio 中展开您的数据库 -> 安全性,您应该会看到一个用户列表。 我很确定我没有将它安装到我的 PC 中。我必须仅使用默认设置/引用等连接数据库。这意味着 SQL Management Studio 或任何其他类型的没有SQL 服务,但 C# 2010 已有的服务 您是在连接 Visual Studio 时收到此错误,还是在运行代码时收到此错误? @DabuleanuCatalin 您是否在与 Visual Studio 相同的计算机上运行代码?【参考方案3】:

没有回答,所以我想我会列出我的建议,似乎也出现在 VS Community 2015 中,以管理员身份运行 VS,它似乎可以解决问题。

即使数据库是在我的帐户下运行的 Visual Studio 中创建的,并且 Web 服务也在我的帐户下运行,但似乎无法在没有管理员的情况下访问数据库。

也许其他人可以回答为什么需要这样做,只知道需要管理员才能使许多 VS 功能正常工作,不知道为什么一开始没有启用它。

仅使用本地开发数据库就很烦人。应该可以在没有所有这些摆弄和错误信息的情况下工作。

【讨论】:

【参考方案4】:

如果您使用的是 netcore,请不要忘记在项目目录中运行 dotnet ef database update。我遇到了同样的错误,并且为我修复了它。

【讨论】:

【参考方案5】:

一旦您使用集成安全 = true,它就会使用您的 Windows 凭据登录到 sql 实例。您必须授予该用户对 sql 实例的权限。如果您未指定集成安全性 = true,则它以匿名用户身份登录,这就是用户登录失败的原因。您可以使用第三个选项创建一个 sql 帐户,然后在连接字符串中传递它们并登录。取决于你想做什么。

【讨论】:

【参考方案6】:

在 ASP.Net Core 中,如果尚未创建数据库,可能会引发类似的错误! (错误信息可能会让您感到困惑,因为它与登录无关!)。

有几种方法可以解决:

您可以在通常看到 .csproj 文件的项目根路径的命令行中在 dotnet ef migrations add Initial 之后运行 dotnet ef database update

或者,您可以调用dbContext.Database.EnsureCreated()dbContext.Database.Migrate(),但建议使用后一种Migrate() 方法,因为它不会损坏以后的迁移。

public class Program

    public static void Main(string[] args)
    
        var host = BuildWebHost(args);

        using (var scope = host.Services.CreateScope())
        
            var services = scope.ServiceProvider;

            try
            
                var dbContext = services.GetRequiredService<MyDbContext>();
                //dbContext.Database.EnsureCreated(); //ensure db is created (created database can't be later updated using migrations!)
                dbContext.Database.Migrate(); //ensure pending migrations applied and db is created 
            
            catch (Exception ex)
            
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred creating the DB.");
            
        

        host.Run();
    

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();

【讨论】:

以上是关于用户 '' 登录失败,无法打开登录请求的数据库“Database1.mdf”。登录失败。用户 'rBcollo-PC\rBcollo' 登录失败的主要内容,如果未能解决你的问题,请参考以下文章

无法打开登录请求的数据库“”。登录失败。用户“sa”登录失败

无法打开登录请求的数据库“ASPNETDB”。登录失败。用户 'Philip-Desktop\Philip' 登录失败

用户 '' 登录失败,无法打开登录请求的数据库“Database1.mdf”。登录失败。用户 'rBcollo-PC\rBcollo' 登录失败

无法打开登录请求的数据库 MyDB。登录失败。用户“myUser”的登录失败

新建sql注册提示无法打开用户默认数据库 登录失败,怎么解决

无法打开登录所请求的数据库 "xxxx"。登录失败。 用户 'NT AUTHORITYSYSTEM' 登录失败。