You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL Managed Instance登录名显示问题咨询:SSMS安全标签无法查看关联Login

关于Azure SQL Managed Instance中Login与数据库用户关联的问题解答

这是Azure SQL MI的默认行为吗?

答案是否定的——正常情况下,当你在服务器级别创建Login并将其与数据库用户关联后,这个Login应该会出现在SSMS的服务器节点下的「安全性>登录名」列表中。如果你看不到它,大概率是以下几种情况导致的:

  • 权限不足:如果你是用数据库级用户(而非服务器管理员/拥有VIEW ANY DEFINITION权限的账号)连接的,可能没有权限查看服务器级的Login列表。
  • 混淆了包含数据库用户:如果你创建的是包含数据库用户(Contained Database User),这类用户是直接在数据库内创建、不依赖服务器Login的,自然不会在服务器级的安全标签里出现对应的Login。
  • SSMS UI缓存:试试右键点击「登录名」节点选择「刷新」,有时候UI没有及时同步最新的服务器对象。

有哪些视图/DMV可以查询数据库用户关联的Login?

你可以通过系统视图和DMV来关联查询数据库用户与服务器Login的映射关系,以下是几个常用的查询:

1. 数据库级别:查看当前库所有用户对应的服务器Login

SELECT 
    dp.name AS [数据库用户名],
    sp.name AS [服务器登录名],
    dp.type_desc AS [用户类型],
    dp.authentication_type_desc AS [认证类型]
FROM 
    sys.database_principals dp
LEFT JOIN 
    sys.server_principals sp ON dp.sid = sp.sid
WHERE 
    dp.type IN ('S', 'U', 'G') -- 筛选SQL用户、Windows用户/组
    AND dp.name NOT LIKE '##%' -- 排除系统内置主体

如果服务器登录名列返回NULL,说明这个是包含数据库用户,没有对应的服务器Login。

2. 服务器级别:查看所有Login及其关联的数据库用户

SELECT 
    sp.name AS [服务器登录名],
    dp.name AS [数据库用户名],
    db.name AS [所属数据库]
FROM 
    sys.server_principals sp
LEFT JOIN 
    sys.databases db ON db.database_id > 4 -- 可选:排除系统数据库
CROSS APPLY 
    (SELECT * FROM db.sys.database_principals dp WHERE dp.sid = sp.sid) dp
WHERE 
    sp.type IN ('S', 'U', 'G')
    AND sp.name NOT LIKE '##%'

3. 额外辅助:检查角色关联

如果需要查看用户所属的角色,可以用:

  • 数据库角色:sys.database_role_members + sys.database_principals
  • 服务器角色:sys.server_role_members + sys.server_principals

内容的提问来源于stack exchange,提问作者SQLAstro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:30:12