在 Integrated Security = False 的客户端计算机上将 SQL Compact 替换为 SQL LocalDB

Posted

技术标签:

【中文标题】在 Integrated Security = False 的客户端计算机上将 SQL Compact 替换为 SQL LocalDB【英文标题】:Replace SQL Compact with SQL LocalDB on client machines with Integrated Security = False 【发布时间】:2016-02-19 16:57:01 【问题描述】:

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

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

用户“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 论坛上发布了一个类似的问题,但没有收到很好的回复。 另外,***上好像也有类似的问题,但是没有很好的回答。LocalDB and Entity Framework 6 - SecurityLocalDB connection with Integrated security=False

我有一种感觉,我已经知道答案了,因为 LocalDB 无法在其他关闭集成安全性的计算机上工作,因为理论上它使用的是本地 SQL 服务器实例,其中登录名存储在主数据库中并且客户端主数据库与 LocalDB 内的登录名不匹配。

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

【问题讨论】:

您能否展示一下您是如何尝试连接到数据库的?现在你的问题没有 C# 代码。 添加了连接字符串。确实没有要显示的 C# 代码。这只是使用简单的 DataReader 甚至 ExecuteScalar 连接到数据库的 ADO.NET。他们都在抛出同样的错误。 如果那是您的实际连接字符串。它坏了。 LocalDb 周围的参数不匹配。 @Eris 抱歉,复制/粘贴错误。 Microsoft 将通过打开集成安全性来放弃 LocalDB 中的安全问题 根本没有放弃安全问题,=true 在域中同样安全,如果不是更安全的话然后将密码存储在 MDF 中。 【参考方案1】:

根据MSDN Documentation:

当您使用 LocalDB 或 AttachDBFileName 选项。

【讨论】:

正如我所怀疑的那样。听起来 LocalDB 只为简单的不安全应用程序而设计。在我看来,SQLite 会更好地替代 SQL Compact。至少 SQL Compact 有一个您可以添加的用户名/密码。 不完全是。 LocalDB 被设计为具有最小开销的开发人员实例。它从未被设计为在应用程序中发布,也从未替代 SQL CE。 所以你是说微软没有“官方”有替代已弃用的 SQL Compact? 我不是微软的员工,不能发表官方声明。在我看来,是的,就是这样。我发现了几篇关于使用 SQLite/SQLitePCL 而不是 SQLCE 用于 Windows 商店应用程序的文章。 MS 似乎对 OSS 项目做出了更多贡献,并开放了自己的项目,因此这是一条可能的道路。 整个区块是什么?集成安全选项的其他选项与答案无关。这是来自文档的直接引用,带有指向所述文档的链接。

以上是关于在 Integrated Security = False 的客户端计算机上将 SQL Compact 替换为 SQL LocalDB的主要内容,如果未能解决你的问题,请参考以下文章

Trusted_Connection 与 Integrated Security 影响连接池

vs 2017 Integrated Security 为sspi 含义

Integrated Security=SSPI 是不是需要管理员组中的 Windows 用户?

在 Integrated Security = False 的客户端计算机上将 SQL Compact 替换为 SQL LocalDB

关于SQL连接语句中的Integrated Security=SSPI/ture/false

POJ1038 Bugs Integrated, Inc. 状压dp(二进制做法)