回答

收藏

如何在SQL Server 2008 R角色成员在2中列出

技术问答 技术问答 521 人阅读 | 0 人回复 | 2023-09-14

我正在使用以下内容T-SQL从我的SQL Server 2008 R角色成员在数据库中获取:
3 s( b$ @) a' |: A7 @& F$ Eselect rp.name as database_role,mp.name as database_userfrom sys.database_role_members drm  join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)  join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)order by rp.name当我检查输出时,我注意到唯一列出的角色成员db_datareader是数据库角色-db_datareader未列出在查询中的用户成员。  V* f/ V7 B: s3 ~  F4 {
为什么会这样?如何列出数据库角色的用户成员?! j) p, p# F$ h% J
我想我也应该问问表是否应该问一下sys.database_role_members其实所有包含角色的成员?+ c; I  B; A- W* ^# Z- |$ S
                                                               
) T2 o4 W/ r3 G" ^/ Z1 O% L8 F    解决方案:                                                                - v5 s0 e1 O: A( N1 P0 K2 a7 N" W
                                                                我已经知道发生了什么。( V% E; @2 l/ X- h$ u
当我查询角色成员时,我正在将输出与角色属性对话框中列为角色成员SSMS进行比较-
; h. G$ C. u+ P$ O这包括用户和角色,但用户没有列在查询中,如我的问题所示。我发现在列出角色成员时,SSMS作为角色作为角色来显示这些角色。6 W& V! L* s% V1 A; _7 b! H* G  x
复制了以下查询SSMS列出角色成员的方式:
( B9 v$ j3 T* h" X2 ?mp.name as database_userlfrom RoleMembers drm  join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)  join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)order by rp.namemp.name as database_userlfrom RoleMembers drm  join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)  join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)order by rp.name上述查询采用递归CTE将角色扩展到其用户成员。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则