3

Microsoft 已弃用 SQL Compact,因此我想在客户端计算机上将其替换为 SQL LocalDB。

使用“Integrated Security = True”时,替换在客户端机器上工作正常,但是一旦我设置“Integrated Security = False”,我就会得到

用户“TestUser”登录失败

我不能在客户端上使用集成安全性。
他们应该无法在不知道已在其 machine.config 中加密的用户名/密码的情况下访问数据库。

我在 VS 中创建了一个登录名,如下所示:

CREATE LOGIN TestUser WITH PASSWORD = 'asdfsdfasdf';
GO
CREATE USER TestUser FOR LOGIN TestUser WITH DEFAULT_SCHEMA = [dbo];
GO 
exec sp_addrolemember 'db_owner', 'TestUser'
GO

连接字符串与此类似:

<add name=" ConnectionStringName" 
    connectionString="Data Source=(LocalDB)\v11.0;
        AttachDbFilename=|DataDirectory|\TEST.mdf; 
        Integrated Security=False; User Id=TestUser;
        Password=asdfsdfasdf"
    providerName="System.Data.SqlClient" />

我在 MSDN 论坛上发布了一个类似的问题,但没有收到很好的回复。
此外,似乎在 stackoverflow 上也有类似的问题,但没有很好的回应。
LocalDB 和实体框架 6 -
具有集成安全性的安全 LocalDB 连接 = False

我有一种感觉,我已经知道了答案,因为 LocalDB 无法在其他计算机上运行,​​因为从理论上讲,它使用的是 SQL 服务器的本地实例,其中登录名存储在主数据库和客户端中master 数据库与 LocalDB 中的登录名不匹配。

在我看来,微软会通过打开集成安全性来放弃 LocalDB 中的安全问题,这似乎很荒谬。
任何人都可以找到数据库,将其复制到他们的计算机上,然后使用 SQL 工具读取数据库,甚至不知道用户名/密码。

4

1 回答 1

1

根据MSDN 文档

当您使用 LocalDB 或 AttachDBFileName 选项时,您必须使用集成安全性。

于 2015-11-21T23:23:07.937 回答