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