SQl Server 2012 LocalDb共享访问



我正在考虑将用于数据存储的LocalDB添加到我的应用程序中。

背景:

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

NT服务:1) 对我们的后端服务器进行web服务调用,以获取特定于客户端的设置和配置选项
2) 上载客户端创建的记录。

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

LocalDB似乎很适合这里,但这两个项目可以同时访问LocalDB吗?经过一些在线调查,看起来LOCALDB共享实例是可能的。然而,这是否意味着NT服务必须始终保持LOCALDB连接的有效性?

已经完成了与您所描述的非常相似的部署,是的,这是可以完成的。然而,我强烈建议不要这样做。

一些想法:

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

你真的需要一个数据库吗?还是厚客户端可以为每个记录写一个文件到特定的位置,然后服务检查(或构建缓冲区)并在途中发送?

另一种选择是删除NT服务,并将其功能作为客户端启动过程的一部分。为什么有一个长时间运行的进程不断检查配置更改,并且只有在用户正在积极使用系统时才推送数据?假设您没有需求/现有系统。