Sql server 如何检查用户是否有权查看SQL Server上的视图定义?

Sql server 如何检查用户是否有权查看SQL Server上的视图定义?,sql-server,permissions,Sql Server,Permissions,如何查找登录用户是否有权查看SQL Server上的视图定义?我需要找出视图是由哪些表/列组成的 我也使用了同样的SQL;对于视图定义,我们使用以下查询: 查询: select * from sys.objects where name like '%SECTION_MASTER_V%' SELECT definition FROM sys.objects o JOIN sys.sql_modules m ON m.object_id = o.object_id WHERE o.obje

如何查找登录用户是否有权查看SQL Server上的视图定义?我需要找出视图是由哪些表/列组成的

我也使用了同样的SQL;对于视图定义,我们使用以下查询:

查询:

select * 
from sys.objects 
where name like '%SECTION_MASTER_V%' 
SELECT definition
FROM sys.objects o
JOIN sys.sql_modules m ON m.object_id = o.object_id
WHERE o.object_id = 579337674
  AND o.type = 'V'   
结果:579337674

查询:

select * 
from sys.objects 
where name like '%SECTION_MASTER_V%' 
SELECT definition
FROM sys.objects o
JOIN sys.sql_modules m ON m.object_id = o.object_id
WHERE o.object_id = 579337674
  AND o.type = 'V'   
结果:空

结果我得到空值。有人知道这里可能出了什么问题吗?

有两件事:

使用sp_helptext:这比跳过系统表容易得多。 您可以使用sys.fn_my_permissions查看您对任何对象的权限。
您可以使用此查询查看对象级权限:WHERE子句中的注释掉部分将结果限制为查看定义权限

SELECT 
    o.name AS ObjectName,
    su.name AS LoginName,
    dp.permission_name AS PermissionType,
    dp.state_desc AS PermissionStatus
FROM 
    sys.database_permissions dp
     INNER JOIN 
    sys.objects o ON 
        dp.major_id = o.object_id
     INNER JOIN 
    sys.sysusers su ON 
        dp.grantee_principal_id = su.uid
--WHERE dp.[type] = 'vw'
ORDER BY o.name