我们有一个应用程序,包括MS Access前端(2007,mdb格式),一些.net库和一个SQL Server(2008)后端。我正在开发一个安装程序,它可以自动安装MS Access Runtime,我们的应用程序,我们的库,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 :Microsoft说:“如果可能,请使用Windows身份验证。”
使用Windows身份验证并授予BUILTIN \ USERS完全访问权限:这是迄今为止最简单的解决方案,但不知何故,这样做“似乎不对”......
< / LI>该应用程序面向非技术受众,因此要求用户配置权限不是一种选择。
编辑:一些澄清:它是一个“本地”应用程序,即SQL Server与应用程序位于同一台机器上;从网络访问SQL Server既不必要也不需要。该软件(用于管理股票,发票等的常规业务应用程序)可免费下载,因此应在各种环境(域/非域,不同操作系统等)和IT中运行。不需要知识来安装它 - 除了通常的“点击setup.exe,确认UAC提示,确认安装目录等”。我希望最常见的场景是“Windows XP,本地管理员用户”和“Windows Vista / 7,启用了UAC的本地管理员用户”。由于我们希望遵循良好实践,运行,在后一种情况下,应用程序不应要求“以管理员身份运行”。
答案 0 :(得分:1)
@Heinzi写道:
使用Windows身份验证和 授予BUILTIN \ USERS完全访问权限: 这是迄今为止最简单的解决方案, 但不知何故,它“似乎是错误的” 该...
此处通常的方法是添加自定义用户组(例如“db-users”)并将用户放入该组。这样,您就可以准确控制谁被允许访问。
答案 1 :(得分:1)
怎么样:
答案 2 :(得分:1)
如果听起来像你只有冰山一角。在销售和部署访问SQL应用程序时。
我采取了不同的路线。我将虚拟计算机作为独立工作站,并将域服务器和工作站全部虚拟化。
我编写了一个脚本,它们是VBA和VBScript的组合。 问 DB和App是在单台计算机还是在不同计算机上运行。 如果不同的计算机是DB所在的计算机的名称。 DB和App是否位于工作组,家庭组或域环境中 DB计算机是否已具有SQL Express或更高版本 App计算机是否已安装Access或Access Runtime 如果是哪个版本。 是否所有或仅限于有限的用户都可以访问 如果限制用户的用户组名称是什么,则可以访问数据。 该组是否已存在 如果否,则列出应添加到组的用户的名称 还有关于管理员用户和组的问题
该脚本启动虚拟机并执行一系列步骤来代理MDB和SQL DB以进行部署。然后为服务器安装创建一个MSI,其中包含一个用于设置环境的自定义脚本。最后将MDB打包成一个不错的MSI。
我已经改进了流程,以便在服务器安装开始时回答一些问题。这意味着可以从工作站或域中的列表中选择用户组和用户,具体取决于之前提出的问题。
如果用户,则应用用户是工作站或域的管理员组的成员。他们获得额外的菜单选项。这允许他们在工作站或域的数据库用户组中添加或删除成员。我觉得这很有帮助。
我现在正在进入下一阶段,并将我的评估应用程序托管为SasS(软件即服务)(租赁)。因此,该应用程序可以在任何HTML5浏览器,Windows或Mac中用作虚拟桌面或Android和Apple设备。说过Access在移动设备上有点难看。
当我启动并运行时,我会将平台提供给其他人。