Sql server 系统对象返回错误的授权

Sql server 系统对象返回错误的授权,sql-server,sql-server-2008,sql-server-2008-r2,grant,Sql Server,Sql Server 2008,Sql Server 2008 R2,Grant,我在SQLServer2008R上发现了奇怪的错误或行为。我正在尝试为1架构的角色授予执行权限。但是,当我查看系统对象时,我看到EXECUTE权限设置为system\u表sysallocunits。如果我向任何其他模式授予权限,那么一切都会顺利进行,权限将设置为该模式。 我使用以下查询 GRANT EXECUTE ON SCHEMA::Sync TO [app_TSSyncService_web_svc] select princ.name , princ.type_desc

我在SQLServer2008R上发现了奇怪的错误或行为。我正在尝试为1架构的角色授予执行权限。但是,当我查看系统对象时,我看到EXECUTE权限设置为system\u表sysallocunits。如果我向任何其他模式授予权限,那么一切都会顺利进行,权限将设置为该模式。 我使用以下查询

GRANT EXECUTE ON SCHEMA::Sync TO [app_TSSyncService_web_svc]

select  princ.name 
,       princ.type_desc 
,       perm.permission_name 
,       perm.state_desc 
,       perm.class_desc 
,       object_name(perm.major_id) 
from    sys.database_principals princ 
left join 
        sys.database_permissions perm 
on      perm.grantee_principal_id = princ.principal_id 
WHERE princ.name = 'app_TSSyncService_web_svc'
我得到以下输出:

name    type_desc   permission_name state_desc  class_desc  (No column name)
app_TSSyncService_web_svc   DATABASE_ROLE   EXECUTE GRANT   SCHEMA  sysallocunits
当我为任何其他角色授予此架构的权限时,也会发生同样的情况

更新
刚刚发现我的模式具有相同的对象id sysallocunits有什么建议吗?我如何重写查询以忽略它而不进行硬编码?

没有,您的模式具有一个
schema\u id
,它恰好与
sysallocunits
对象id
具有相同的数值

您查询检查任何非对象的权限是错误的;对于架构,您希望将
mair\u id
from连接到中的
schema\u id
,而不是假设它是一个
object\u id
连接到
sys.objects


我不打算在这里完全重写您的查询,因为我不知道您希望查询哪些类的权限。

您的答案对我来说已经足够好了。不需要重新编写查询。还有一个问题,还有其他问题吗?我的意思是,除了模式之外,还有什么会导致这种情况?我能确定如果记录的主id大于0,它不是对象吗?