对象“Movie”、数据库“master”、模式“dbo”的 SELECT 权限被拒绝(类似但不同的问题)

问题描述 投票:0回答:1

这看起来与下面列出的问题类似,但又有所不同:

对象“Users”、数据库“XXX”、架构“dbo”的 SELECT 权限被拒绝

问题是用户“dbo”是数据库所有者(见下图),因此,我无法在成员资格中添加任何其他角色。

enter image description here

所以我的问题是:为什么我仍然被拒绝访问数据库以及如何修复它?

这是数据库:

enter image description here

sql-server
1个回答
0
投票

经过几天的尝试和错误,我终于弄清楚发生了什么事。

总结起来就是数据库连接字符串。最初,我的 appsettings.json 如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "MvcMovieContext": "Server=luna\\SQLEXPRESS;Database=MvcMovieContext-ffba61a8-25a6-4c34-8ce0-2c0283e1a4f3;User Id=\\luna\\tjfan;TrustServerCertificate=True;Trusted_Connection=True;"
  }
}

我有另一个文件 appsettings.development.json,其中仅包含 appsettings.json 中内容的第一部分。我没有其他类似的文件,例如appsettings.production.json。

当我从 Visual Studio 中通过 IIS Express 运行时,数据库一切顺利。我转储了发送到数据库的连接字符串,它正是 appsettings.json 中设置的字符串。

但是,当我发布该项目并通过网络浏览器访问它时,连接被拒绝。进一步的检查表明,无论出于何种原因,连接字符串被重置以访问数据库“master”。我在我的项目中到处搜索,但找不到任何专门重置连接字符串的地方。

经过多次尝试,我终于找到了一个解决方案(我仍然不明白为什么),将appsettings.json复制到一个名为appsettings.Production.json的新文件中。内容完全一样,这次连接字符串如预期设置正确。

即使问题(暂时)解决了,我仍然很困惑为什么会发生这种情况。我认为首先应用了 appsettings.json 设置,如果没有其他类似文件(例如 appsettings.Production.json),那么该设置将保持不变。显然,这里有些不同。

任何人都可以对此提供任何见解吗?

© www.soinside.com 2019 - 2024. All rights reserved.