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

SQL Azure创建新用户后连接报错916:无法访问master数据库

解决SQL Azure连接报错916的问题

这个错误的核心原因很明确:SQL Azure的服务器级登录(LOGIN)是创建在master数据库中的,但你只在目标业务数据库创建了对应的数据库用户(USER)。当你用这个新账户连接时,如果没有明确指定要访问的业务数据库,客户端会默认尝试连接master,而master里没有为这个登录匹配的用户,就会触发916错误。

下面给你两种解决思路,优先推荐第一种:

1. 连接时明确指定目标业务数据库

这是最直接且符合业务账户权限设计的解决方案,不需要额外修改权限:

  • 如果用SSMS等客户端工具连接:在登录窗口的「连接到数据库」下拉框里,直接选择你授权的那个业务数据库(不要选默认的<default>或master)。
  • 如果用代码里的连接字符串:添加Initial Catalog=你的业务数据库名;参数,示例如下:
    Server=tcp:yourserver.database.windows.net,1433;Initial Catalog=YourTargetDB;Persist Security Info=False;User ID=login_name;Password=strong_password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
    

2. (可选)让登录具备访问master数据库的权限

如果你的业务场景确实需要这个登录访问master(比如执行跨库查询、查看服务器级元数据),可以在master中创建对应的用户并授权:

-- 切换到master数据库
USE master;
GO
-- 创建与登录绑定的数据库用户
CREATE USER user_name FOR LOGIN login_name;
GO
-- 授予连接master的权限
GRANT CONNECT TO user_name;
GO

另外还要纠正你之前执行语句的小问题:SQL Azure中,登录名、用户名这类标识符不需要用单引号包裹(单引号是用来表示字符串的),正确的写法应该是:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';
CREATE USER user_name FOR LOGIN login_name;

如果你的登录名/用户名包含特殊字符(比如连字符、空格),才需要用方括号[]包裹,比如CREATE USER [user-name] FOR LOGIN [login-name];。

内容的提问来源于stack exchange,提问作者Frederic Le Guen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:49:41