3

我被要求维护一个在 ASP 经典中创建的站点,该站点使用 SQL Server 数据库。

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

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

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

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

4

4 回答 4

3

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

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

EXEC sp_change_users_login AUTO_FIX, UserSecure

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

于 2013-01-10T18:41:06.880 回答
0

一个问题困扰了我好几次:

如果您的存储过程(或视图)需要用户的许可(userA比如说授予选择/执行/等的权限。on (这又需要用户在的数据库上)viewBviewBuserAviewBviewB

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

于 2013-01-10T18:26:35.557 回答
0

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

于 2013-01-11T14:49:32.973 回答
0

问题太清楚了,

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

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

首先从数据库中删除用户:

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

然后转到

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

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

于 2013-01-28T08:19:53.837 回答