SQL Server 2022中普通角色成员查看同角色成员的实现方法
SQL Server 2022 普通角色成员查看同数据库其他角色成员的方法
在SQL Server 2022中,虽然sp_getrolemember已被移除,但普通数据库角色成员可以通过查询系统视图组合实现查看同数据库内其他角色成员的需求,且无需额外赋予权限。
核心查询语句
使用sys.database_role_members和sys.database_principals两个系统视图关联查询,这两个视图的读取权限默认对所有数据库用户开放:
SELECT dp_role.name AS 角色名称, dp_member.name AS 成员名称, dp_member.type_desc AS 成员类型 FROM sys.database_role_members drm JOIN sys.database_principals dp_role ON drm.role_principal_id = dp_role.principal_id JOIN sys.database_principals dp_member ON drm.member_principal_id = dp_member.principal_id ORDER BY dp_role.name, dp_member.name;
关键说明
sys.database_role_members存储数据库角色与成员的关联关系,包含角色和成员的principal_idsys.database_principals存储数据库内所有主体(角色、用户、应用程序角色等)的详细信息,通过关联两个视图可获取完整的角色成员信息- 普通角色成员默认拥有这两个视图的SELECT权限,无需额外授权即可执行查询
对之前尝试问题的补充
如果之前创建视图未生效,大概率是视图依赖了需要更高权限的系统对象(如部分系统目录视图需要VIEW DEFINITION权限),而上述两个视图是普通用户默认可访问的,因此不会出现权限问题。
内容的提问来源于stack exchange,提问作者user763539
相关产品推荐
相关产品推荐

