2012-07-12 179 views
1

我正在考虑将用于数据存储的LocalDB添加到我的应用程序。SQl服务器2012 LocalDb共享访问

背景:

1)我的应用程序有2个部分。 a。桌面客户端。 (在登录到计算机的用户下运行) b。 NT服务。 (作为本地系统运行)

NT服务: 1)针对客户端特定的设置和配置选项,对我们的后端服务器进行Web服务调用。
2)上传客户端创建的记录。

桌面应用程序: 1)加载由NT服务下载的设置并根据这些设置运行。 2)创建客户记录。

LocalDB似乎很适合这里,但是这两个项目可以同时访问LOCALDB吗?在线调查后,它看起来像一个LOCALDB共享实例可能是可能的。但是这是否意味着NT服务将不得不始终保持LOCALDB连接的连接?

回答

2

完成了与您所描述的非常类似的部署,可以这样做。不过,我强烈建议不要这样做。

的几点思考:

  1. 的LocalDB '实例' 要求的用户配置文件被加载。始终加载的唯一使用配置文件是本地系统,也称为NT Authority \ SYSTEM帐户。
  2. 只有'实例'的所有者才能启动或停止它。可以将'automagic'实例设置为忽略自动摊牌超时,但仍必须至少启动一次。我通过创建一个Windows任务解决了这个问题,该任务启动了一个引导程序,该引导程序在启动时将'sqllocaldb start v11.0''删除。 Windows任务以'低于正常'的进程优先级执行,因此启动的引导程序实际上将SQLEnv.exe优先级提升为高,以用于我的用例。
  3. 假设你使用NT Authority \ SYSTEM作为实例配置文件,使用类似SQL Management Studio的可能需要系统上的PsExec。这是一个安全风险,因为它使您可以交互访问以本地系统运行的进程。不要这样做。
  4. 我们使用组访问我们的客户端部分,因此我们将这些组的访问权限授予实际的数据库/实例。没有这一点,几乎不可能授予新用户访问实例/数据库的权限。

您真的需要一个数据库吗?或者厚客户端可以将文件写出到服务随后检查(或构建缓冲区)并发送它的每个记录的特定位置?

另一种替代方法是删除NT服务,并使其功能成为客户端启动过程的一部分。为什么有一个长期运行的进程不断检查配置更改,并且只在用户正在使用系统时才推送数据?假设你没有要求/现有系统。

+0

我决定反对这个。我要去使用SQL CE的路线来代替。我为客户端建立了一个IPC层来与NT服务进行通信。 – Nikoli 2012-08-09 14:02:49