如何在SQL Server 2008 R角色成员在2中列出
技术问答
447 人阅读
|
0 人回复
|
2023-09-14
|
我正在使用以下内容T-SQL从我的SQL Server 2008 R角色成员在数据库中获取:
* k, E. S4 A( w: y Y9 vselect 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未列出在查询中的用户成员。 w9 Q1 n2 H' ?: y0 s1 o' O; e
为什么会这样?如何列出数据库角色的用户成员?
: r" G9 b9 ]# a3 O' [我想我也应该问问表是否应该问一下sys.database_role_members其实所有包含角色的成员?
4 J& t3 Z' L( a7 e + A7 m( p+ }1 P: J
解决方案:
0 N6 b0 R& K( w" L. V 我已经知道发生了什么。% G$ ?' `+ _5 P7 V: c
当我查询角色成员时,我正在将输出与角色属性对话框中列为角色成员SSMS进行比较-9 T" R+ R" A$ d) ^" J* `3 H
这包括用户和角色,但用户没有列在查询中,如我的问题所示。我发现在列出角色成员时,SSMS作为角色作为角色来显示这些角色。7 B7 g4 Q0 o" L' _
复制了以下查询SSMS列出角色成员的方式:. S' v. q1 \* o! N+ r) C
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将角色扩展到其用户成员。 |
|
|
|
|
|