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

Azure AD成员登录SQL Server无法查看全库且遇18456登录失败问题

解决Azure AD组成员登录SQL Server无需指定数据库的18456错误问题

问题背景

使用Azure AD成员登录SSMS时,希望无需指定具体数据库即可查看所有数据库,但创建Azure AD组[SQL-READ]作为master库登录名,并在master及另外两个库创建同名用户后,登录出现“Login failed for user "xxxxxxx" 18456”错误,仅指定具体数据库才能连接。

排查与解决步骤

  • 检查登录的默认数据库设置
    未指定数据库登录时,SQL Server会使用登录账号的默认数据库。若默认数据库不是用户有权限访问的库,就会触发18456错误。执行以下语句将默认数据库改为master(需确保用户已在master库有对应权限):

    ALTER LOGIN [SQL-READ] WITH DEFAULT_DATABASE = master;
    GO
    
  • 授予VIEW ANY DATABASE权限
    要让用户能看到所有数据库,需给master库的登录账号授予VIEW ANY DATABASE权限,执行:

    USE master;
    GRANT VIEW ANY DATABASE TO [SQL-READ];
    GO
    

    该权限允许登录账号在SSMS“数据库”节点下查看所有库,访问具体库仍需对应库的用户权限。

  • 验证Azure AD组成员身份同步
    确认登录的Azure AD用户确实属于[SQL-READ]组,且Azure AD与SQL Server的身份同步已完成。可在master库执行以下语句检查登录及用户信息:

    SELECT * FROM sys.server_principals WHERE name = 'SQL-READ';
    SELECT * FROM sys.database_principals WHERE name = 'SQL-READ';
    

    同时让用户退出并重新登录SSMS,确保身份令牌更新。

  • 检查数据库用户关联正确性
    确保每个目标数据库中的[SQL-READ]用户已正确关联到master库的同名登录,执行:

    USE [目标数据库名];
    SELECT s.name AS LoginName, d.name AS UserName
    FROM sys.database_principals d
    JOIN sys.server_principals s ON d.sid = s.sid
    WHERE d.name = 'SQL-READ';
    

    若关联错误,删除现有用户重新创建:

    USE [目标数据库名];
    DROP USER [SQL-READ];
    CREATE USER [SQL-READ] FROM LOGIN [SQL-READ];
    GO
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:15:35