授予或撤销权限RECEIVE与对象不兼容

时间:2015-02-26 11:08:06

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

我使用的是sql server 2008 r2。

我正在关注本教程http://www.codeproject.com/Articles/144344/Query-Notification-using-SqlDependency-and-SqlCach#heading0001

这是我的代码

GRANT RECEIVE ON dbo.tranferToSIP TO UserName

我收到此错误消息:

Granted or revoked privilege RECEIVE is not compatible with object.

3 个答案:

答案 0 :(得分:0)

尝试一次

Grant select  
ON dbo.tranferToSIP
TO UserName

答案 1 :(得分:0)

我不认为' RECEIVE'是表的有效权限。所有的评论和教程都说它是,但它似乎与QUEUEs而不是TABLEs一起使用。 documentation表明它期望一个QUEUE而不是一个表,并且尝试从表中RECEIVE会出错:

CREATE QUEUE SampleQueue;
RECEIVE * FROM SampleQueue -- works

CREATE TABLE SampleTable (ID int identity(1, 1), Name varchar(80));
RECEIVE * FROM SampleTable -- Invalid object name 'SampleTable'.

SqlDependency创建自己的队列并运行示例而不授予我的RECEIVE或SEND权限(我也必须更改它以便启用添加消息按钮)。我不知道你对SqlDependency创建的队列的权限如何,因为它的名称类似于' SqlQueryNotificationService-d6e60909-be13-4f9c-bb01-59efb5d1a99b'。它还会自动创建存储过程和服务。

select * from sys.service_queues where name like 'SqlQuery%'
select * from sys.services where name like 'SqlQuery%'
select * from sys.procedures where name like 'SqlQuery%'

如果你想看,我在github上创建了一个simple console project。所有你必须拥有的是运行的本地sql服务器(表示很好),它将在其上创建一个Test数据库,ENABLE_BROKER,创建一个Messages表并使用SqlDependency进行查询,该查询将重新查询并显示前5条消息添加一个(从程序中或通过在查询分析器中手动执行)

答案 2 :(得分:0)

我创建了角色来执行存储过程,并尝试向表授予执行权限。检查表是否需要执行权限。就我而言,不需要为表授予权限,也不执行表。 :)