7

我刚刚从 SQL2000 迁移到 SQL2008,并且开始在使用 sp_OACreate 的存储过程上遇到执行权限问题。

系统的其余部分与已设置并添加到数据库的 db 登录一起正常工作。

我试过了:

USE master
GO
GRANT EXEC ON sp_OACreate TO [dbuser]
GO

但这失败并出现以下错误:

消息 15151,级别 16,状态 1,第 1 行找不到用户“dbuser”,因为它不存在或您没有权限。

我以具有完全权限的 sa 身份登录到服务器。我可以执行类似的 sql 语句并将权限应用于服务器角色,但不是登录/用户。

如何将更改应用到特定用户/登录名?

我可以将权限应用于公共角色,它解决了我的问题;但是,这对我来说似乎是一个安全问题,我真的不想将其应用于实时服务器。

4

5 回答 5

6

该错误表明主数据库中不存在用户“dbuser”。

我假设用户存在于主数据库中?

您可以使用以下 T-SQL 进行检查

USE MASTER;
GO

SELECT *
FROM sys.sysusers
WHERE name = 'dbuser'

如果用户不存在,只需使用CREATE USER语句并创建一个名为“dbuser”的用户。如果存在同名登录,用户将自动映射到同名登录。

于 2010-06-15T10:10:32.530 回答
6

从约翰的回答开始,我检查了主数据库上的用户列表,但我的用户不在那里。它是否已被删除或丢失了一些我不知道的。将 dbs 迁移到新的服务器实例时,可能出现了一些问题。

反正; 重新创建用户并将其关联到特定登录名使我能够在主数据库上运行以下语句以允许执行存储的过程。

USE MASTER
GO

GRANT EXECUTE ON [sys].[sp_OADestroy] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OACreate] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OAMethod] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OASetProperty] TO [dbuser]
GO

感谢所有的帮助和指点。希望这对将来的其他人有所帮助。

于 2010-06-15T10:43:09.223 回答
2

您的问题可能与孤立用户有关。

尝试

USE MASTER
GO
EXEC sp_change_users_login 'Report'

这将为每个孤立用户名返回一行。然后,

EXEC sp_change_users_login 'Update_One', 'dbuser', 'dbuser'
于 2010-06-15T09:50:01.980 回答
2

这是我正在使用验证(当前用户)对 sp_OACreate 等具有 EXECUTE 权限的一些代码:

use master;
select state_desc,name from
sys.database_permissions a
left join
sys.all_objects b
on a.major_id = b.object_id
where name like 'sp_OA%';

正如@John Sansom 和@WestDiscGolf 所指出的,用户必须存在于主数据库中,并且必须在主数据库中授予执行权限,因此use Master是必需的。如果用户有执行权限,上面的查询将返回记录,如果没有,则返回空集。(在用户数据库中执行也会返回空集。)

我想不出使用 来检查这些权限的方法fn_my_permissions,这应该是此类工作的正确工具。

于 2011-11-30T15:49:37.737 回答
1

检查您的用户是否对您使用的数据库具有权限。您可以通过Security -> Logins -> Select User打开属性窗口来执行此操作。然后"User Mapping"从右侧菜单中选择。现在检查您希望给定用户有权访问的数据库。之后从窗口底部选择“数据库角色成员资格”并检查"db_owner"。现在用户将成为数据库的所有者,并且能够执行查询、存储过程等。

更新:
通过选择您的数据库-> 安全性-> 用户-> 右键单击​​为数据库添加用户"New User"
或者您可以使用此查询

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2008R2;
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

以下是更多详细信息http://msdn.microsoft.com/en-us/library/ms173463.aspx

于 2010-06-15T08:58:23.097 回答