如何强制OpenSqlFilestream使用当前登录的Windows用户?

时间:2019-06-05 20:27:48

标签: sql-server windows kerberos filestream

我正在使用SQL Server FILESTREAM,并且想与使用Windows网络共享的OpenSqlFilestream传输文件。

问题在于,当与另一个用户(而不是呼叫OpenSqlFilestream)的服务器建立了另一连接时,OpenSqlFilestream失败。

这是在Windows 10客户端上连接到相同域的SQL Server 2016。

复制步骤:

  1. 交互式用户为domain\myuser

  2. 在命令提示符下:

    net use \\server\share /user:domain\otheruser password
    
  3. 运行以下代码:

    dstHandle = OpenSqlFilestream("destination path",     // Obtained with PathName()
                                  SQL_FILESTREAM_WRITE,
                                  0,
                                  pTransactionContext_,   // Obtained with GET_FILESTREAM_TRANSACTION_CONTEXT
                                  transactionContextSize_, 0);
    

OpenSqlFilestream通话之后:

  • dstHandleINVALID_HANDLE_VALUE
  • GetLastError()为5(访问被拒绝)。
  • 在服务器上,Process Monitor记录一个IRP_MJ_CREATE事件,且“模拟”设置为domain\otheruser

两种解决方法(在生产中实际上是不可能的):

  • 如果在调用OpenSqlFilestream之前,我使用返回的令牌使用“ domain \ myuser”(和密码)+ LogonUser来调用ImpersonateLoggedOnUser,则OpenSqlFilestream成功。我不想管理密码...

  • 如果我使用“ klist purge”清除kerberos缓存,则它最终将在一段时间(几分钟)后起作用。

我尝试过与ImpersonateSelfOpenProcessTokenImpersonateLoggedOnUser等玩,但没有成功。

是否有一种方法可以告诉Windows使用当前用户,而不是使用网络资源的用户?

0 个答案:

没有答案