SQL Server 2012 是登录时必须使用的数据库名称吗?

tom*_*tom 1 sql-server-2012

数据库名称是否强制 SQL Server 2012 登录 - 像 SERVERNAME\DBNAME ?在 2005 Server 上,使用 Windows 凭据登录的服务器名称已经足够了。

提前致谢,汤姆

Aar*_*and 6

我认为您混淆了数据库名称和实例名称。SQL Server 可以安装为默认实例(在这种情况下连接到SERVERNAME就足够了),或作为命名实例(在这种情况下您需要使用SERVERNAME\INSTANCENAME或在某些情况下SERVERNAME,PORT_NUMBER)。您永远不会使用 连接到 SQL Server SERVERNAME\DBNAME,但您可能希望在连接字符串(或Options >>连接对话框的部分)中显式设置数据库名称,以便您的用户不会错误地在错误的数据库中执行操作(我怀疑这是一个很大的用户如何对象最终mastermodeltempdb,等)。

在 SQL Server 2012 中,当您使用包含的数据库用户连接到部分包含的数据库时,数据库名称仅在连接字符串中是必需的。例如:

EXEC sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO
CREATE DATABASE contained;
GO
ALTER DATABASE contained SET CONTAINMENT = PARTIAL;
GO
USE contained;
GO
CREATE USER contained WITH PASSWORD = 'contained';
GO
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用这些凭据连接到实例,但没有在 下明确指定数据库名称Options >>

在此处输入图片说明

我收到以下错误:

无法连接到 SHELDON\SQL2014CTPn。
用户 'contained' 登录失败。(Microsoft SQL Server,错误:18456)

在错误日志中:

错误:18456,严重性:14,状态:5
。用户“包含”登录失败。原因:找不到与提供的名称匹配的匹配登录名。

如果我使用该<Browse server...>选项,我会收到相同的错误消息;我需要手动输入数据库:

在此处输入图片说明

当我这样做时,我可以连接。当然,当我以包含的数据库用户身份连接时,对象资源管理器树的用处要小得多;按照设计,我只能访问该数据库:

在此处输入图片说明

包含数据库的出现有助于更轻松地将数据库迁移到不同的服务器。没有办法只说“好吧,我是一个包含数据库的用户,但你为什么不告诉我我可以连接到哪个数据库?” 您需要明确,特别是因为不同的包含数据库可能有具有相同用户名(甚至相同密码)的不同用户;系统中没有任何东西可以阻止这一点(因为它会使迁移更加困难)。

如果您没有使用包含的数据库(特别是包含的数据库用户),那么与以前的版本没有什么不同。