时间:2021-07-01 10:21:17 帮助过:71人阅读
REVERT还支持一个WITH COOKIE = @varbinary_variable选项。这个东西的作用主要是为了保证在启动连接池(connection pool)的情况下,当前会话的上下文不被下一个重用会话的人切换。这个东西就像一个密码一样的东西,你保存了密码,就只有你自己知道密码,才能去解码。
- <span style="color: #008080;">--</span><span style="color: #008080;">Create temporary principal </span>
- <span style="color: #0000ff;">CREATE</span> LOGIN login1 <span style="color: #0000ff;">WITH</span> PASSWORD <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">P@$$w0rdO1</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">GO</span>
- <span style="color: #0000ff;">CREATE</span> <span style="color: #ff00ff;">USER</span> user1 <span style="color: #0000ff;">FOR</span><span style="color: #000000;"> LOGIN login1;
- </span><span style="color: #0000ff;">GO</span>
- <span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@cookie</span> <span style="color: #0000ff;">varbinary</span>(<span style="color: #800000; font-weight: bold;">100</span>); <span style="color: #008080;">--</span><span style="color: #008080;">variable to store the cookie </span><span style="color: #008080;">
- --</span><span style="color: #008080;">switch execution context, generate cookie and assign it to variable </span>
- <span style="color: #0000ff;">EXECUTE</span> <span style="color: #0000ff;">AS</span> <span style="color: #ff00ff;">USER</span> <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">user1</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">WITH</span> COOKIE <span style="color: #0000ff;">INTO</span> <span style="color: #008000;">@cookie</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">select</span> <span style="color: #008000;">@cookie</span>
- <span style="color: #0000ff;">select</span> <span style="color: #ff00ff;">CURRENT_USER</span>
- <span style="color: #0000ff;">EXECUTE</span> <span style="color: #0000ff;">AS</span> <span style="color: #ff00ff;">USER</span> <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">user2</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">;
- </span><span style="color: #008080;">--</span><span style="color: #008080;"> Use the cookie in the REVERT statement. </span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #ff00ff;">CURRENT_USER</span> <span style="color: #0000ff;">AS</span><span style="color: #000000;"> UserName;
- </span><span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@cookie</span> <span style="color: #0000ff;">varbinary</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">);
- </span><span style="color: #008080;">--</span><span style="color: #008080;"> Set the cookie value to the one from the SELECT @cookie statement. </span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@cookie</span> <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">0x21873959E804DD435976EA5D25B7352431A98B4F144C76F6B1502C5AA3C20F30105842EEA9C361B3DA03B2DBD36E0E070100</span><span style="color: #000000;">;
- REVERT </span><span style="color: #0000ff;">WITH</span> COOKIE <span style="color: #808080;">=</span> <span style="color: #008000;">@cookie</span><span style="color: #000000;">;
- </span><span style="color: #008080;">--</span><span style="color: #008080;"> Verify the context switch reverted. </span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #ff00ff;">CURRENT_USER</span> <span style="color: #0000ff;">AS</span><span style="color: #000000;"> UserName;
- </span><span style="color: #0000ff;">GO</span>
参考:
REVERT (Transact-SQL)
Switching Stored Procedure Execution Context in SQL Server using the REVERT clause
SQL Server ->> Revert表达式
标签: