【问题标题】:How to start an SQL Server LocalDB via IIS如何通过 IIS 启动 SQL Server LocalDB
【发布时间】:2012-12-07 10:45:50
【问题描述】:

我正在为网站使用 SQL Server LocalDB。

安装 SQL Server LocalDB 并在安装过程中创建数据库。通过LocalDBCreateInstanceStartLocalDBInstanceLocalDBShareInstance 创建共享实例。

如果实例启动,网站可以成功连接数据库。

但是,如果实例停止,它不会自动启动。从控制台应用程序访问数据库(当实例停止时)会导致实例启动。

所以这似乎是某种权限问题。

应用程序池以 AppPool 身份运行。但是,将其切换到网络服务或本地系统并不能解决问题。

应用程序池配置为加载其用户配置文件,并且“setProfileEnvironment”属性也设置为 true。 (如herehere 所述,这两个设置都是必需的)。

我已使用 Sysinternal Process Monitor 监控数据库访问,但未能找到任何“拒绝访问”条目。

我还尝试从网站本身(在 Global.asax 中)调用 StartLocalDBInstance。调用成功返回(返回值为S_OK),但实例仍然停止。

【问题讨论】:

    标签: sql-server iis localdb


    【解决方案1】:

    这就是在IIS下使用LocalDB的缺点——实例归你的交互式登录所有,实例进程只能通过这个登录启动。由于 IIS 作为某个服务帐户运行,它无法启动属于您的交互式登录帐户的 LocalDB 实例。

    您可以使用 IIS 服务帐户拥有的 LocalDB 实例,但请注意,您可能会遇到用户配置文件问题 - LocalDB 需要创建和加载用户配置文件,而 IIS 使用有时可能不完全的轻量级用户配置文件创建并加载。

    有关在完整 IIS 中运行 LocalDB 的更详细讨论,请参阅这两篇博客文章。我只推荐它用于开发环境,并在生产环境中使用基于服务的 SQL Express。

    1. Part 1: User Profile
    2. Part 2: Instance Ownership

    【讨论】:

    • 我创建了一个small tool at CodePlex 来简化使用默认应用程序池的自动实例(称为“v11.0”)的共享和启动。不过,它需要扩展以涵盖自定义实例名称和其他应用程序池。而且我只建议在开发环境中使用它:-)
    • 奇怪。如果您可以将 IIS 中的“加载用户配置文件”设置为 true,那么它应该可以工作。另外,我认为 Express 已经被 LocalDB 弃用了……
    • 我同意这种行为(不让其他用户身份唤醒 localDB 实例)是一种不幸的设计疏忽。我认为这里没有任何安全问题。如果拥有用户不希望其他用户身份连接到他们的服务器,那么他们可以简单地删除该实例。我希望这个问题在未来的版本中得到解决,因为使用 localDB 进行开发意味着使用启动脚本和其他黑客手段,这对单个用户来说很好,但在组织内部是有问题的。
    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多