2014-01-15 30 views
0

我想了解在访问SQL Server时如何模拟不同的用户。 基本上,我的C#应用​​程序必须使用与启动时相同的帐户访问本地文件系统,但在访问数据库时应使用其他帐户。 如果数据库是远程的,我可以通过使用“runas/netonly”来实现这种分离,但是如果服务器是本地的,那么进程将使用它启动的凭证。 具有DB访问权限凭据的用户与有权访问我需要使用的文件系统的用户不同。 我该如何解决这种情况?本地SQL和Windows身份验证的不同模拟

+1

使用数据库安全性,而不是Windows安全性。授予访问您的.net应用程序的权限。使用.net代码来确定谁可以做什么。 –

+0

政策不允许。我们不能使用SQL身份验证。 – user1986435

回答

0

基本上我的C#应用​​程序具有相同的帐户访问本地文件系统,因为它是与

斯普利特应用推出了两个分开这个访问本地文件要求转换成单独的服务它以所需的权限运行。您的应用程序的两部分使用您选择的IPC进行通信(包括彼此之间的两个应用程序'碎片的认证和授权')。这可能听起来很复杂,但从安全性角度来看,它几乎没有任何问题,并且也很难实施。 C#代码可以使用WindowsIdentity明确模仿和反向模拟。在假冒下通过网络访问受限于授权。但我相信去那里(模拟连接到数据库时,访问本地资源时恢复)只是一个等待收获的bugfarm ......将本地访问部分代码与冒充两个服务中的代码分开是非常强大的imho。

+0

您确认我已经在想什么......在这一点上我们不能拆分应用程序。所以我们不得不求助于模拟/委托并恢复。我真的希望“欺骗”runas,思考SQL应该使用“netonly”证书,即使它是本地的(实际上它确实使用TCP/IP通信);我不知道RUNAS是如何知道它是本地的,但它很聪明... – user1986435

+0

'runas/netonly'只是传递给''CreateProcessWithLogonW''(http://msdn.microsoft.com)的'LOGON_NETCREDENTIALS_ONLY'标志/en-us/library/windows/desktop/ms682431(v=vs.85).aspx) –