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
相关产品推荐
相关产品推荐

