本地 SQL 和 Windows 身份验证的不同模拟

Posted

技术标签:

【中文标题】本地 SQL 和 Windows 身份验证的不同模拟【英文标题】:Different impersonation for local SQL and windows authentication 【发布时间】:2014-01-15 15:26:34 【问题描述】:

我试图了解如何在访问 SQL Server 时模拟不同的用户。 基本上,我的 C# 应用程序必须使用启动时使用的相同帐户访问本地文件系统,但在访问数据库时应该使用另一个帐户。 如果数据库是远程的,我可以通过使用“runas /netonly”来实现这种拆分,但是如果服务器是本地的,则进程将使用启动它的凭据。 拥有数据库访问权限的用户与有权访问我需要使用的文件系统的用户不同。 我该如何解决这种情况?

【问题讨论】:

使用数据库安全性,而不是 Windows 安全性。授予对您的 .net 应用程序的访问权限。使用您的 .net 代码来确定谁可以做什么。 政策不允许这样做。我们不能使用 SQL 身份验证。 【参考方案1】:

基本上,我的 C# 应用程序必须使用启动时使用的相同帐户访问本地文件系统

将应用程序一分为二,并将这个本地文件访问要求分成一个单独的服务,该服务以所需的权限运行。您的应用程序的两个部分使用您选择的 IPC 进行通信(包括彼此之间的两个应用程序“分片”的身份验证和授权)。这听起来可能很复杂,但对于安全 POV 来说几乎是安全的,而且一点也不难实现。 C# 代码可以使用WindowsIdentity 显式模拟和反向模拟。在模拟下跨网络访问受委托。但我相信去那里(在连接到数据库时模拟,在访问本地资源时恢复)只是等待收获的一个错误农场......将本地访问部分代码与模拟中的二分之一服务分开更强大恕我直言。

【讨论】:

您确认我已经在想什么了...此时我们无法拆分应用程序。所以我们不得不求助于模拟/委托和还原。我真的希望“欺骗”runas 认为 SQL 应该使用“netonly”凭据,即使它是本地的(实际上它确实使用 TCP/IP 通信);我不知道 RUNAS 是如何知道它是本地的,但它很聪明...... runas /netonly 只是传递给CreateProcessWithLogonWLOGON_NETCREDENTIALS_ONLY 标志周围的垫片

以上是关于本地 SQL 和 Windows 身份验证的不同模拟的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server2005 windows身份验证无法登陆问题

与 IIS、Firefox 和 SQL Server 集成的 Windows 身份验证

如何使用 Windows 和 SQL 身份验证使用 SQL Server Management Studio 连接到 SQL Server

SQL Server Windows身份验证登录不了 解决方法

不同域的 SQL Server 登录(Intellij Idea)

如何使用 Windows 身份验证通过 sqlalchemy 连接到 SQL Server?