我已经执行了以下操作:
USE [MyDatabase];
GO
CREATE LOGIN [MyDomain\MyAccount] FROM WINDOWS WITH DEFAULT_DATABASE=[MyDatabase];
CREATE USER [MyDomain\MyAccount] FOR LOGIN [MyDomain\MyAccount];
GRANT EXECUTE ON SCHEMA::[MySchema] TO [MyDomain\MyAccount];
GRANT SELECT ON SCHEMA::[MySchema] TO [MyDomain\MyAccount];
GRANT INSERT ON SCHEMA::[MySchema] TO [MyDomain\MyAccount];
(我没有授予任何角色,因为我不希望此登录名能够访问此数据库中的任何其他模式。)
我以 MyDomain\MyAccount 身份运行 SSMS(以其他用户身份运行)。然后我尝试连接到这个实例。但是,我得到:
无法打开用户默认数据库。登录失败。
用户“MyDomain\MyAccount”登录失败。(Microsoft SQL Server,错误:4064)
如果我在连接属性中将默认数据库设置为 MyDatabase,我会得到相同的结果。
我运行了 Profiler 跟踪并看到错误 18456 状态 38:
用户“MyDomain\MyAccount”登录失败。原因:无法打开明确指定的数据库“MyDatabase”。[客户:我的IP地址]
随后是错误 18456 状态 40:
用户“MyDomain\MyAccount”登录失败。原因:无法打开登录属性中指定的数据库“MyDatabase”。[客户:我的IP地址]
MyDatabase 在线,我可以通过不同的登录名轻松连接到它。我需要向 MyDomain\MyAccount 授予哪些额外权限?还有什么我想念的吗?
猜测您缺少连接权限。我一直认为这是与用户一起创建的,但可能存在未添加的情况。
尝试运行
您也可以尝试更改 [MyDomain\MyAccount] 的默认架构
最后,您可以使用我的sp_dbpermissions和sp_srvpermissions来查看用户的权限。