【问题标题】:Connection to SQL Server database after restore还原后连接到 SQL Server 数据库
【发布时间】:2013-01-10 17:36:36
【问题描述】:

我被要求维护一个使用 SQL Server 数据库的 ASP 经典网站。

我以备份的形式获得了数据库。我在本地计算机上恢复了数据库并为其创建了DSN connection。但是,当我尝试加载我的站点时,该站点所依赖的stored procedures 给出了一个错误,即执行权限被拒绝。

有问题的存储过程有一个名为UserSecure 的用户显示为唯一拥有EXECUTE 权限的人,我已尝试使用该名称创建用户但不起作用,即使我可以手动登录到 SQL Server使用 UserSecure 的 Management Studio 尝试使用这些凭据从网页连接会给出 login failed error

如果我运行sp_helplogins,我的 Windows 凭据显示为数据库的所有者,实际上我可以从 SSMS 中执行,但不能从 ADO 连接执行。

另一方面,webpage 中的连接是这样编码的,我不熟悉连接的应用程序部分。也许这是问题的一部分?我尝试使用DSNDSN-less 连接,可以连接但不能对数据库执行任何操作?

【问题讨论】:

  • 你能提供更多的上下文吗?什么版本的 SQL?涉及多少个数据库?您的存储过程或视图中是否有任何跨数据库引用?
  • 你是在数据库安全下创建用户还是在服务器安全下创建登录
  • 我最终做的不是专注于一个过程,而是查看整个数据库的权限并将 EXECUTE 授予来宾用户。这一切都在本地 IIS 上进行测试,因此安全性不是问题。

标签: sql sql-server database asp-classic ado


【解决方案1】:

您应该确保将数据库服务器登录名映射到适当的数据库用户(在处理数据库备份时经常会出现这个问题)。如果不是,那么您需要修复映射。幸运的是,有一个名为sp_change_users_login 的命令可以用来解决这个问题。

首先,检查您的登录名是否映射到您的数据库用户。使用 SQL Server Management Studio(假设 SQL Server 2008),在安全/登录下查找UserSecure。如果您在列表中看到它,请双击它并选择User Mapping。从那里,找到您尝试连接的数据库,并查看UserSecure 是否映射到该数据库。如果不是,您可以使用以下命令修复它(假设UserSecure 是登录用户的名称):

EXEC sp_change_users_login AUTO_FIX, UserSecure

有关 sp_change_users_login 的更多信息,请参阅 MSDN:
http://msdn.microsoft.com/en-us/library/ms174378.aspx

【讨论】:

    【解决方案2】:

    一个让我痛过几次的问题:

    如果您的存储过程(或视图)需要用户的许可(比如userA),并且存储过程调用另一个数据库的表或视图(比如viewB),那么仅仅登录是不够的在viewB 的数据库上,您还必须明确授予userA 选择/执行/等权限。在viewB 上(这又需要viewB 的数据库上的用户)

    因此,在您的情况下,您可能需要显式授予 UserSecure 对您恢复的数据库引用的现有数据库上的存储过程的执行权限。

    【讨论】:

      【解决方案3】:

      这可能不是最优雅的修复,但我不再专注于一个过程,而是授予来宾用户对整个数据库的执行权限。由于这仅在我的个人计算机上运行,​​因此安全性不是问题,而且似乎已经解决了问题。

      【讨论】:

        【解决方案4】:

        非常了解问题,

        用户(名称)的 ID 将不同于备份的数据库和恢复的数据库。 MSSQL 存储用户的 ID 而不是用户名(文本),因此每台机器和备份的 ID 将不同(99% 的时间)。因此,当 ID 不匹配时,您无权访问。

        您需要做的就是删除用户并重新创建它,确保在两个地方都这样做:

        先从数据库中删除用户:

        数据库 -> 安全 -> 用户 -> 右键单击​​(用户名)+ 删除

        然后转到

        安全 -> 登录 -> 右键单击​​(用户名)+ 删除

        然后重新创建用户并为帐户提供正确的权限,一切都很好。

        【讨论】:

          猜你喜欢
          • 2010-12-17
          • 2023-04-04
          • 2016-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多