【问题标题】:SQL Server 2008 R2 on Server 2012 R2 web site connection issueServer 2012 R2 网站连接问题上的 SQL Server 2008 R2
【发布时间】:2015-04-08 16:28:34
【问题描述】:

我在许多数据库和 MS 操作系统上都使用了这个连接字符串,没有任何问题。 Windows Server 2003、2008 R2 和 2012 R2 Eval,所有 Express 版本。

我现在尝试部署到新的 Windows Server 2012 R2 安装,但遇到了一些错误。我在 Windows Server 2012 R2 机器上安装了 SQL Server 2008 R2。

我的骗局:

connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\myDB.mdf;Integrated Security=True;User Instance=False" ProviderName="System.Data.SqlClient"

我想这一定与新服务器上组件的安装顺序有关。

我过去能够简单地将myDB.mdf 复制到基本上任何Web 服务器并打开或访问数据库表。此数据库包含与其关联的网站的 ASP 成员资格。

这是错误:

数据库“master”中的 CREATE DATABASE 权限被拒绝。一种尝试 为文件附加一个自动命名的数据库 C:\inetpub\techTran\App_Data\myDB.mdf 失败。一个数据库 存在同名文件,或者指定的文件无法打开,或者是 位于 UNC 共享。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:CREATE 数据库“master”中的 DATABASE 权限被拒绝。

我以为我明白这个错误是什么。我已经检查了权限,它们与部署了该数据库的其他服务器相匹配。我的 SQL Server 安装基本上都是一样的。这里唯一的区别是这是虚拟机上的 Windows Server 2012 R2。或者我没有像我在过去设置的 5 台服务器中那样安装 SQL Server 2008 R2。 (我猜可能是这种情况。)

更新:卸载并重新安装 SQL Server 和 SSMS。

我知道服务器上只有一个名为myDB.mdf 的数据库名称,所以我不相信错误的“同名”部分。我为数据库添加了安全性以便可以打开它,我什至在服务器上安装了 Visual Studio 2012 以确保可以打开数据库。我可以在 localhost(服务器 2012)上运行完整的应用程序,但我无法通过 Web 连接访问它。

我相信与

相关的具体错误信息

数据库“master”中的 CREATE DATABASE 权限被拒绝

是问题。

我以前从未见过此错误。

我通常将NETWORK SERVICE 帐户分配给数据库以允许访问,这也是该帐户的设置方式。我还认为这可能是连接字符串问题。但是这个相同的字符串现在已经在 4 个不同的服务器上工作了,没有任何变化。 Server 2003、2008 R2 和 2012(演示平台)(所有 Express 版本),现在在生产中失败了。

首页加载,然后登录抛出上述错误。

【问题讨论】:

  • 等等,Server 2003 是从哪里来的?之前你说他们都安装在Windows Server 2008 R2?正如我之前所说,Windows Server 2008 R2 之后有a significant change between how service accounts work。 Server 2003 也有很大不同。
  • 如果您的应用程序无法访问它,它是否会尝试创建数据库?您是否真的将数据库从旧系统复制到新系统?你确认server logins and database users are still correctly mapped了吗?
  • 所以我在 Server 2003、2008 和现在的 2012 上运行了 SQLSERVER 2008 R2。该数据库位于网站的 app_Data 文件夹中。我在每台服务器上运行了各种版本的 IIS。我已经能够将数据库复制到任何 app_data 文件夹并通过网站登录屏幕访问数据库。 Server 2003 是当前的生产和开发环境 2 系统。在 2008 年测试了迁移,并决定最终迁移到 2012。dev 2012 服务器已启动并完美运行。
  • 我不使用任何代码创建主数据库。或与此相关的其他数据库。我只是将 myDB.mdf 复制到每个 app_data 文件夹中。
  • 所有用户帐户似乎都已正确映射。

标签: sql-server-2008-r2 windows-server-2012-r2


【解决方案1】:

你的连接字符串是AttachDbFilename=|DataDirectory|\myDB.mdf。好吧,您的路径必须在一个地方(SQL Server)而不是另一个地方(应用程序配置)发生了变化。 AttachDbFilename 将尝试create a new DB if it can't find that file。那可能是你的错误。

顺便说一句,Windows Server 2003、Windows Server 2003 R2、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2 都存在差异,尤其是在安全性方面,尤其是在 SQL Server 的行为方式方面,但是您继续交替使用它们。这使得很难说出发生了什么。此外,您的连接字符串显示Data Source=.\SQLEXPRESS。这是 SQL Server Express 吗?因为这与大多数其他版本的 SQL Server 也有重要区别。较新的版本与标准版非常相似,但版本越旧,它的怪癖就越多。它们通常被认为是不同的野兽。

【讨论】:

    【解决方案2】:

    已解决:我不确定这是怎么发生的,或者为什么没有发生。但由于某种原因,SQL 的安装没有将 NETWORK SERVICE 帐户添加到 sysadmin 服务器角色。我在运行 SQL 2008 R2 的 SERVER 2003 安装中对此进行了交叉引用,并发现 sysadmin SQL Server 角色在我正常运行的环境中包含 NETWORK SERVICE。因此,一旦我将用户帐户添加到此角色,一切都很好。

    我相信这可能是安装 SQL 2008 R2 期间的一个问题。我确实指定了 NETWORK SERVICE,但由于某种原因没有提供该角色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多