使用Navision优雅地处理sql-server权限

时间:2010-01-25 12:26:05

标签: sql-server sql-server-2008 active-directory permissions navision

背景

我正在创建一个应用程序(称为MyApp),它必须从Navision处理的SQL Server数据库中读取数据。 Navision用户应该能够使用我的应用程序,而无需修改数据库中的权限。

Navision对权限的处理似乎在应用层上。它执行权限检查而不将它们存储在数据库中。

问题

Navision在与数据库同步时会覆盖数据库中的用户,权限和其他相关对象,因此创建数据库用户并使用它的常规方法将无效。

可能的解决方案

我认为最合适的解决方案是在Active-Directory中创建MyApp角色,该角色授予数据库必要的权限,并将此角色添加到所有用户。

我不知道该怎么做,或者即使有可能。欢迎提供其他解决方案或建议,但请仅建议可以在ActiveDirectory或Navision中管理解决方案。

服务器是运行Navison 5的SQL Server 2008服务器,客户端是Navision 6.我正在使用Windows Server 2K8的Active Directory。

编辑:

我的应用程序是一个创建和设计应用程序的箱子。它需要读出客户的名称和ID,以及items表中的一些项目,这就是我需要这个功能的原因

2 个答案:

答案 0 :(得分:2)

如果在NAV中使用增强的安全模型,则会将用户权限同步到SQL Server。但是,这些SQL权限映射到SQL Server中的app角色,而不是用户的登录名。如果使用标准安全模型,则所有用户都映射到单个SQL应用程序角色,该角色是超级用户(安全性较低)。

如果要使用NAV安全模型(即通过NAV创建的SQL App角色)访问SQL Server中的数据,则应使用CFront API(通过SDK选项安装)。如果您使用的是NAV 2009,也可以选择使用Web服务。

如果要直接访问SQL Server,则必须使用SQL Server自行管理权限。如果您创建一个SQL脚本来授予权限,则可以轻松恢复NAV在同步登录期间可能删除的任何内容。

您无法完全按照自己的描述从Active Directory授予SQL权限。相反,您必须将Active Directory组映射到SQL Server登录或NAV Windows登录(取决于您是决定直接访问SQL还是通过支持的NAV API)。注意:与角色关联的权限分别在SQL或NAV中管理;不在AD。

从管理角度来看,您只需在此Active Directory组中添加和删除用户即可。如果使用NAV增强安全模型,则AD组中的每个用户还必须在Windows登录中具有条目,并且无论何时进行更改,都必须同步登录。这种轻微的不便是本机数据库的遗留问题。

答案 1 :(得分:1)

一般情况下,建议不要跳过NAV层并直接读取/写入数据库,因为您绕过存储在表格中的所有NAV业务逻辑并报告NAV中的对象。

您的应用程序打算做什么(如果您无法获得具体内容,请使用NAV加载项或数据端口)?