我有一个关于在 SQL Server 的链接服务器上为用户组添加权限的问题。我不是安全专家,所以我呼吁所有人。
这里是拓扑:
我在 Hyper-V 虚拟服务器上安装了我称之为 X 的私有软件。该软件的用户使用远程桌面通过虚拟机进行连接。
该应用程序有自己的 SQL Server 数据库实例。此数据库的安全性是 Windows Authenticated。Application X 用户都属于 Windows Server 2019 Active Directory (AD) 中的一个用户组。
另一方面,我有一个 Y 应用程序 (Microsoft Dynamic 365),它本地安装在每个工作站上,并且有自己的 SQL 实例。该应用程序使用一个我也称为 Y 的 SQL 数据库。
因为我想在 2 个 SQL 实例之间共享信息,所以我在 X 实例上创建了一个链接服务器到 Y 实例。我通过一些 SQL 查询成功地从我的实例 X 中插入、更新和删除实例 Y 的数据库中的一些信息。为此,我授予自己 X 数据库的 DB_owner 权限。
我已经达到了允许用户组 X 能够使用与 SQL 服务器 Y 上交互的相同查询从应用程序 X 运行的阶段。
但是,我意识到我需要从 Security、Connection 菜单在应用程序 Y 的 SQL 实例中创建 X 的每个用户。当我授予 DB_Owner 角色时,我的请求有效。我原以为我可以将 AD 中使用的相同组用于我的 X 应用程序。我试过很好,但它不起作用。
我不知道这是否是由于我的链接服务器的配置造成的。
这是我正在使用的配置:
有人可以为我指出一个解决方案,以避免在我的实例 Y 中从 X 重新创建我的 AD 的每个用户,并且只需链接我的组 X。
对于组,它应该以与单个用户相同的方式工作。您必须有适当的 spn 才能在两个实例之间授予 kerberos 委派。
也许您已经从 ssms 尝试过,所以您还没有完成两跳进行身份验证。以这种方式,NTLM 授予您权限,但是当您使用应用程序时,您需要在两个跃点上授予身份验证,因此您会遇到未授予用户正确登录的匿名身份验证错误。
请检查一下。
https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/register-a-service-principal-name-for-kerberos-connections?view=sql-server-ver15