2014-05-23 45 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解释得很好。

相关问题