2015-02-26 79 views
1

我正在使用sql server 2008 r2。授予或撤銷的權限RECEIVE與對象不兼容

我下面這個教程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. 
+0

根據錯誤消息,是'dbo.tranferToSIP'表或服務代理隊列,而不是說,視圖或存儲過程?嘗試'SELECT type_desc FROM sys.objects WHERE object_id = OBJECT_ID('dbo.tranferToSIP')'確認。 –

+0

@JeroenMostert這是一張桌子。但是當我執行你的commad,這是'選擇type_desc FROM sys.objects中WHERE OBJECT_ID = OBJECT_ID(「dbo.tranferToSIP」)'我得到空的結果 –

+0

@JeroenMostert請您在這裏可以http://stackoverflow.com/檢查我的問題question/28721210/how-to-keep-sql-dependency-doing-the-its-purpose從昨天開始,沒有人回答我 –

回答

0

一旦嘗試這種

Grant select 
ON dbo.tranferToSIP 
TO UserName 
+0

那個用戶名是數據庫的管理員,他已經有了select,我問的是接收盛大的。 –

0

我不認爲'RECEIVE'是表的有效權限。所有的評論和教程都說它是這樣的,但它似乎與QUEUE而不是TABLE一起工作。該documentation顯示,預計隊列,而不是一個表,並試圖從表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創建自己的隊列,而不授予的接收和發送的權限爲我工作運行示例(我也必須改變它,以便添加消息按鈕被啓用)。我不知道你是如何在由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 server(express很好),它會創建一個Test數據庫,ENABLE_BROKER,創建一個Messages表,並使用SqlDependency進行查詢,當重新查詢並顯示前5條消息時一個添加(或者從節目或通過手動執行它在查詢分析儀)

0

我已經創建的角色,以執行存儲過程,並試圖授予執行權限表。檢查表是否需要執行權限。在我的情況下,它不需要授予表的權限,我們不執行表。 :)