【发布时间】:2010-01-18 16:58:18
【问题描述】:
我们有一个应用程序,由一个 MS Access 前端(2007,mdb 格式)、一些 .net 库和一个 SQL Server (2008) 后端组成。我正在开发一个安装程序,它会自动安装 MS Access 运行时、我们的应用程序、我们的库、SQL Server Express 并配置所有内容。
显然,MS Access 应用程序和库(在正常的非管理员用户上下文中运行)需要访问 SQL Server 数据库。 授予应用程序访问权限的最佳方式是什么?
这就是我想出的。不幸的是,所有这些似乎都有缺点:
SQL Server Compact Edition:不支持视图。
Application Roles:这似乎是最佳实践。但是,它需要在访问数据库之前执行存储过程(我无法在连接字符串中传递应用程序凭据)。因此,我不能将其用于attach the SQL Server tables as a linked tables in the Access MDB,这是我们的 Access 应用程序的要求。
SQL Server User Instance:引用 MSDN:“此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能.. ."
SQL Authentication:微软说:“如果可能,请使用 Windows 身份验证。”
-
使用 Windows 身份验证并授予 BUILTIN\USERS 完全访问权限:这是迄今为止最简单的解决方案,但不知何故这样做“似乎是错误的”...
该应用程序面向非技术受众,因此要求用户配置权限不是一种选择。
编辑:一些澄清:这是一个“本地”应用程序,即 SQL Server 与应用程序位于同一台机器上;从网络访问 SQL Server 既没有必要也不需要。该软件(用于管理库存、发票等的常规业务应用程序)将可以免费下载,因此它应该在各种环境(域/非域、不同操作系统等)和 IT 环境中运行安装它不需要知识-除了通常的“单击setup.exe,确认UAC提示,确认安装目录等”。我预计最常见的场景是“Windows XP,本地管理员用户”和“Windows Vista/7,启用 UAC 的本地管理员用户”。由于我们希望遵循良好的做法,运行应用程序在后一种情况下不应要求“以管理员身份运行”。
【问题讨论】:
-
客户端和数据库服务器在同一台机器上吗?我们是在谈论“一对一”的情况,每个用户在他的机器上都有自己的服务器吗?机器是否在域中?用户是否有密码来启动/解锁他的机器?如果他不是管理员,用户如何在他的机器上安装软件包?
-
@Philippe:我已经更新了这个问题。用户将通过双击 setup.exe 并确认 UAC 提示来安装应用程序。 ;-) 但是,运行应用程序(并因此访问 SQL Server DB)不需要提升。
标签: sql-server security ms-access deployment sql-server-express