ORIGINAL_LOGIN (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server のインスタンスに接続しているログインの名前を返します。 この関数を使用すると、明示的または暗黙的にコンテキストが何度も切り替えられるセッションにおける、元のログインの ID を取得できます。

Transact-SQL 構文表記規則

構文

ORIGINAL_LOGIN( )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

戻り値の型

sysname

解説

この関数は、元の接続コンテキストの ID を監査するときに便利です。 SESSION_USERCURRENT_USER などの関数が、現在実行しているコンテキストを返す一方で、ORIGINAL_LOGIN は、そのセッションで SQL Server のインスタンスに最初に接続したログインの ID を返します。

次の例では、現在のセッションの実行コンテキストを、ステートメントの呼び出し元のログインから login1 に切り替えます。 関数 SUSER_SNAME および ORIGINAL_LOGIN を使用すると、現在のセッションのユーザー (コンテキストの切り替え先のユーザー) と、元のログイン アカウントが返されます。

Note

Azure SQL Database では ORIGINAL_LOGIN 関数がサポートされますが、Execute as LOGIN がサポートされないため、次のスクリプトは失敗します。

USE AdventureWorks2022;  
GO  
--Create a temporary login and user.  
CREATE LOGIN login1 WITH PASSWORD = 'J345#$)thb';  
CREATE USER user1 FOR LOGIN login1;  
GO  
--Execute a context switch to the temporary login account.  
DECLARE @original_login sysname;  
DECLARE @current_context sysname;  
EXECUTE AS LOGIN = 'login1';  
SET @original_login = ORIGINAL_LOGIN();  
SET @current_context = SUSER_SNAME();  
SELECT 'The current executing context is: '+ @current_context;  
SELECT 'The original login in this session was: '+ @original_login  
GO  
-- Return to the original execution context  
-- and remove the temporary principal.  
REVERT;  
GO  
DROP LOGIN login1;  
DROP USER user1;  
GO  

関連項目

EXECUTE AS (Transact-SQL)
REVERT (Transact-SQL)