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

3

Microsoft已弃用SQL Compact,因此我想在客户机上使用SQL LocalDB进行替换。

当使用“Integrated Security = True”时,在客户机上进行替换可以正常工作,但一旦我设置为“Integrated Security = False”,那么就会出现如下错误:

Login failed for user 'TestUser'

我不能在客户机上使用集成安全性。
他们不应该能够访问数据库而无需知道用户名/密码,这些信息已经被加密存储在他们的machine.config文件中。

我像以下方式在Visual Studio中创建了一个登录:

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和Entity Framework 6-安全
Integrated security = false的LocalDB连接

我有一种感觉,本地数据库(LocalDB)不能在关闭集成安全的其他计算机上使用,因为理论上它正在使用SQL服务器的本地实例,其中登录存储在主数据库中,而客户端的主数据库将不匹配LocalDB中的登录。

在我看来,这似乎荒唐,因为Microsoft留下了集成安全性开启的LocalDB,放弃了安全问题。
任何人都可以找到数据库,将其复制到自己的计算机上,然后使用SQL工具读取数据库,甚至不需要知道用户名/密码。


@goroth 可能是因为默认情况下,“本地管理员”具有“sysadmin”角色。因此,任何以本地管理员身份连接的机器/人员/软件基本上都是sysadmin。 - Erik Philips
@ErikEJ,由于Microsoft放弃了SQL Compact这个更安全的产品,我无法强制要求所有客户都安装SQL Express。 - goroth
看起来是一个重复的问题,与http://stackoverflow.com/questions/27138477/protect-localdb-from-user-access相同。 - Erik Philips
@ErikPhilips 我想我创建了一个重复的。当我在StackOverflow搜索时,我没有注意到这一点。 - goroth
@ErikEJ 是的,有。LocalDB 的设计初衷是仅运行 SQL Express 的一个非常小的部分(33MB),只在 .NET 应用程序执行时运行。但是 SQL Express 比 33MB 大得多,并且作为一个服务运行。 - goroth
显示剩余8条评论
1个回答

1
根据MSDN文档所述:

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


正如我所怀疑的那样。听起来LocalDB只设计用于简单的不安全应用程序。在我看来,SQLite会是SQL Compact更好的替代品。至少SQL Compact可以添加用户名/密码。 - goroth
1
并不完全正确。LocalDB旨在成为一个开发人员实例,具有最小的开销。它从未被设计为内置应用程序或替代SQL CE。 - Eris
那么你的意思是微软没有“官方”的替代SQL Compact吗? - goroth
我不是微软的雇员,也无法发表官方声明。在我看来,的确是这种情况。我发现了几篇关于在Windows Store应用中使用SQLite/SQLitePCL而非SQLCE的文章。微软似乎正在为开源项目做出更多的贡献,并开发了自己的开源项目,因此这是一个可能的发展方向。 - Eris
整个块是什么? 集成安全选项的其他选项与答案无关。 这是来自文档的直接引用,并附有链接到该文档。 - Eris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接