2014-05-23 47 views
0

我有一個存儲過程,根據執行它的用戶返回不同的結果。我的意圖是讓它返回相同的結果。我自己的用戶得到預期的結果(很多行),但應用程序的服務帳戶得到一個空的結果集(並且沒有錯誤)。查詢返回不同的結果,具體取決於用戶

create procedure mal.get_geospatial_levels 
as 

set nocount on 

select 
    level_name = c.name 
from sys.objects o 
    inner join sys.columns c 
     on c.object_id = o.object_id 
where o.name like 'mb%' 
    and c.name like '%[_]v%[_][0-9]%' 
    and c.name not like 'mb%' 
    and c.name not like 'admin%' 
    and c.name not like '%[_]name' 
    and c.name not in ('AREA_SQ_KM', 'OBJECTID', 'Shape') 
group by c.name 
order by c.name 

如果查詢在SSMS中自己執行,則會發生同樣的情況。

我該看什麼?

+3

我的猜測是您的權限不匹配。 –

+0

什麼樣的權限控制你看到的行?我對權限的理解是,如果我的權限不足,我會收到錯誤消息,但這只是更少的行。該服務帳戶可以執行存儲的proc,因此不需要對所使用的表的權限:[link](http://stackoverflow.com/questions/3815411/stored-procedure-and-permissions-is-execute-enough) 。 – OutstandingBill

+0

有人會解釋爲什麼-1? – OutstandingBill

回答

2

這是sys.objects的特別之處。爲了從sys.objects中看到一行,你必須擁有行代表的對象的權限。 This post解釋得很好。

相關問題