为什么我无法连接到SQL Server 2012 LocalDB共享实例?

Cor*_*rty 25 sql-server sql-server-express sql-server-2012 localdb sql-server-2012-express

我正在尝试在Windows 7 x64计算机上设置SQL Server 2012 LocalDB(RTM,x64)共享实例,但我似乎无法连接到共享实例.我正在使用管理员命令提示符进行所有设置.这是我创建实例的方式:

sqllocaldb create MyInstance
Run Code Online (Sandbox Code Playgroud)

产生响应:

LocalDB instance "MyInstance" created with version 11.0.
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在我分享实例:

sqllocaldb share "MyInstance" "MySharedInstance"
Run Code Online (Sandbox Code Playgroud)

结果如下:

Private LocalDB instance "MyInstance" shared with the shared name: "MySharedInstance".
Run Code Online (Sandbox Code Playgroud)

看起来还不错.此时,我的info命令产生:

.\MySharedInstance
MyInstance
v11.0
Run Code Online (Sandbox Code Playgroud)

使用管理员或非管理员命令提示符从所有者帐户(管理员)连接到实例似乎工作正常.但是,当我以普通用户(不是Windows管理员)身份登录并尝试连接时,事情就会出现问题:

sqlcmd -S (localdb)\.\MySharedInstance
Run Code Online (Sandbox Code Playgroud)

结果是:

Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. .
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout expired.
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Run Code Online (Sandbox Code Playgroud)

使用"-l"开关增加登录超时没有用.我可以连接到默认的v11.0实例,该实例不是共享的.非管理员用户的info命令产生与上面相同的内容,除非没有"MyInstance",因为它是admin用户拥有的命名实例.以下命令(适用于admin用户/实例所有者):

sqllocaldb info ".\MySharedInstance"
Run Code Online (Sandbox Code Playgroud)

也会导致错误:

Windows API call "FileTimeToSystemTime" returned error code: -2147024809.
Run Code Online (Sandbox Code Playgroud)

所以问题是为什么我的非管理员用户不能连接到我的共享实例?这似乎打败了共享实例的整个目的.当我尝试查询共享实例时,"sqllocaldb info"命令会抛出错误是什么?

Aar*_*and 23

另一个编辑

Cory,如果您安装了以前版本的SQL Server(例如2008),那就是sqlcmd您正在使用的版本.要连接到LocalDb,您需要使用SQL Server 2012版本sqlcmd.因此,您对用户的指示必须通过运行以下方式确保他们使用SQL Server 2012版本:

C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd -S "(localdb)\.\InstanceName"

这对我有用.我尚未验证的是sqlcmd,安装了sqllocaldb.msi的用户是否可以使用此路径和版本.抱歉,我没有安装SQL Server 2012的裸机(或者只安装了以前的版本)来彻底尝试这一点.但是如果明确地调用110版本就sqlcmd可以告诉我.

我想你也可以指示用户改变他们的系统变量,以便首先出现110个版本(恕我直言的应该是这种情况).

FileTimeToSystemTime已被证实是由克日什托夫的同事的一个错误.因此,对于非所有者来说,我仍然无法解决连接问题sqllocaldb.但我已经证明SSMS和SSMS sqlcmd都可以工作,所以我希望能让你更接近跑步.

编辑

您需要向实例添加任何非所有者用户,例如,CREATE LOGIN [MyDomain\OtherUser] FROM WINDOWS;以及任何适当的权限.在我的测试登录失败并生成错误的错误消息("FileTimeToSystemTime"错误消息是一个错误).你还需要GRANT CONNECT.执行此操作后,您能够使用Management Studio通过此连接从第二个用户进行连接(我尝试过的唯一用户):

(localdb)\.\MySharedInstance
Run Code Online (Sandbox Code Playgroud)

但是sqlcmd,无论我如何尝试连接,我仍然会收到错误:

sqlcmd -S "(localdb)\.\MySharedInstance"
sqlcmd -S ".\MySharedInstance"
sqlcmd -S "(localdb)\MySharedInstance"
sqlcmd -S "GREENHORNET\MySharedInstance"
sqlcmd -S ".\LOCALDB#SH04FF8A"
sqlcmd -S "GREENHORNET\LOCALDB#SH04FF8A"
Run Code Online (Sandbox Code Playgroud)

所有产量:

HResult 0xFFFFFFFF,级别16,状态1 SQL Server网络接口:

找到指定的服务器/实例时出错[xFFFFFFFF].

Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:建立与SQL Server的连接时发生了与网络相关或特定于实例的错误.找不到服务器或无法访问服务器.检查实例名称是否正确以及SQL Server是否配置为允许远程连接.有关详细信息,请参阅SQL Server联机丛书..

Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:登录超时已过期.

虽然我已经验证实例已设置为接受远程连接.所以还有一些sqlcmd必须经历的其他箍.

关于sqllocaldbexe,这是如何遵循任何逻辑的?我可以看到实例在那里info,当我试图阻止它时,我得到一个正确的错误消息,我得到一条消息,当我尝试启动它时已经[已经]启动,但我无法连接到它?

在此输入图像描述

因此,除非您需要 sqlcmd访问权限,否则在短期内我会让次要用户使用SSMS(一旦您授予了足够的权限),并希望Krzysztof将获得有关其他项目的更多信息.


关于4.0.2更新,请访问http://connect.microsoft.com/SQLServer/feedback/details/723737/smo-cant-connect-to-localdb-instances:

我们明确决定不在.NETDB安装程序中包含.NET Framework 4.0.2.安装.NET Framework更新会增加LocalDB安装程序的大小并导致可能的重新启动.由于LocalDB是独立于.NET而构建的,因此我们认为我们不应该为每个LocalDB安装承担这笔费用.未来的.NET版本(包括.NET 4.5,现在在CTP中)将支持开箱即用的LocalDB.一些开发人员可能还希望将来选择使用ODBC,PHP驱动程序/ PDO以及JDBC.那些开发人员对更新.NET不感兴趣.


Rus*_*ght 8

正如原帖所暗示的那样,这并不像预期的那样直截了当,但我最终能够通过命名管道进行连接.

通过命名管道连接到LocalDB实例