代码之家  ›  专栏  ›  技术社区  ›  Heinzi

带有SQL Server后端的MS Access应用程序的安全模型(部署)

  •  2
  • Heinzi  · 技术社区  · 16 年前

    我们有一个应用程序,由MS Access前端(2007,mdb格式)、几个.net库和一个SQL Server后端(2008)组成。我正在开发一个安装程序,它自动安装MS Access运行时、我们的应用程序、我们的库、SQL Server Express并配置所有内容。

    显然,MS-Access应用程序和库(在正常情况下运行, 非管理员用户上下文 )需要访问SQL Server数据库。 授予访问应用程序权限的最佳方式是什么?


    这就是我想出来的。不幸的是,所有这些似乎都有缺点:

    • 查询性能优化 :不支持视图。

    • Application Roles :这似乎是 最佳实践 . 但是,它需要在访问数据库之前执行存储过程(我无法在连接字符串中传递应用程序凭据)。因此,我不能用这个 attach the SQL Server tables as a linked tables in the Access MDB ,这是访问应用程序的要求。

    • SQL Server User Instance :引用MSDN:“ 此功能将在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用此功能。。。 "

    • SQL Authentication :Microsoft说:“ 如果可能,请使用Windows身份验证。 "

    • 使用Windows身份验证并授予内置用户完全访问权限 :这是迄今为止最简单的解决方案,但不知何故,这样做“似乎是错误的”。。。

    应用程序面向的是非技术受众,因此要求用户配置权限不是一个选项。

    编辑:一些说明:它是一个“本地”应用程序,即SQL Server与应用程序位于同一台计算机上;不需要也不希望从网络访问SQL Server。该软件(用于管理库存、发票等的常规业务应用程序)将可免费下载,因此应在各种环境(域/非域、不同操作系统等)中运行,安装该软件不需要it知识--除了通常的“单击setup.exe,确认UAC提示符,确认安装目录等。我预计最常见的场景是“Windows XP,本地管理员用户”和“Windows Vista/7,启用UAC的本地管理员用户”。既然我们想遵循好的做法, 跑步 在后一种情况下,应用程序不应要求“以管理员身份运行”。

    3 回复  |  直到 16 年前
        1
  •  1
  •   David-W-Fenton    16 年前

    @海因茨写道:

    使用Windows身份验证和 授予内置用户完全访问权限: 这是目前为止最简单的解决方案, 但不知何故,这样做“似乎是错误的” 那。。。

    这里通常的方法是添加一个自定义用户组(例如“db users”)并将用户放在该组中。这样你就可以准确地控制谁被允许进入。

        2
  •  1
  •   voon    16 年前

    怎么样:

    • 使用预先配置为连接到本地安装的SQL Server实例的Access ADP项目。
    • 使用BuiltIn\Users组(或SQL身份验证)进行连接,但只授予最低限度的凭据。足以登录并。。。
    • 调用sp_setappprole将客户端连接“提升”到定义的应用程序角色的标识。
        3
  •  1
  •   user3383778    12 年前

    如果听起来你只是冰山一角。在销售和部署access SQL应用程序时。

    我走了另一条路。我有作为独立工作站的虚拟计算机,域服务器和工作站都是虚拟的。

    我写了一个脚本它们是VBA和VBScript的组合。 问 是要在单台计算机或不同计算机上运行的数据库和应用程序。 如果不同的计算机,数据库所在的计算机的名称是什么。 是工作组、家庭组或域环境中的数据库和应用程序 数据库计算机是否已具有SQL Express或更高版本 应用程序计算机是否已安装访问或访问运行时。
    如果是哪一个版本。 所有或只有有限的用户有权访问。
    如果受限制,要访问数据的用户的用户组名称是什么。 这个组是否已经存在 如果没有列出应添加到组中的用户的名称 还有关于管理员用户和组的问题

    该脚本启动虚拟机,并通过一系列步骤来表示MDB和SQL DB以进行部署。然后为服务器安装创建MSI,其中包含设置环境的自定义脚本。最后将MDB打包到一个漂亮的MSI中。

    此后,我对该过程进行了增强,以允许在服务器安装开始时回答一些问题。这意味着用户组和用户可以从工作站或域中的列表中选择,具体取决于先前提出的问题。

    如果用户,则应用程序用户是工作站或域的管理组的成员。他们有额外的菜单选项。允许他们在工作站或域的数据库用户组中添加或删除成员。我觉得这很有帮助。

    我现在进入下一个阶段,并考虑托管我的评估应用程序作为一个SasS(软件即服务)(出租)。因此,该应用程序可以在任何HTML5浏览器、Windows或Mac上作为虚拟桌面或Android和苹果设备使用。虽然说在移动设备上访问有点难看。

    当我开始运行时,我会让其他人可以使用这个平台。

    推荐文章