USER_NAME (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric のSQL 分析エンドポイント
Microsoft Fabric のウェアハウス
指定した識別番号から、データベース ユーザー名、または現在のユーザー名を返します。
構文
USER_NAME ( [ ID ] )
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
ID
sys.database_principals に記載されているデータベース ユーザーに関連付けられている ID 番号。 ID は int です。かっこが必要です。
戻り値の型
nvarchar(128)
注釈
ID を省略した場合は、現在のコンテキストの現在のユーザーであると見なされます。 パラメーターに NULL
という語が含まれていると、USER_NAME
は NULL
を返します。 USER_NAME
ステートメントの実行後に ID を指定せずに EXECUTE AS
を呼び出した場合、USER_NAME
では偽装したユーザーの名前が返されます。 Windows プリンシパルがグループでのメンバーシップを使ってデータベースにアクセスした場合、USER_NAME
はグループではなく Windows プリンシパルの名前を返します。
USER_NAME()
関数は Azure SQL Database でサポートされていますが、EXECUTE AS USER = USER_NAME(n)
と一緒に を使用することは Azure SQL Database ではサポートされていません。
例
A. USER_NAME() を使用してユーザー ID を識別する
次の例では、sys.database_principals に記載されているように、ユーザー ID 13
の ユーザー名を返します。
SELECT USER_NAME(13);
GO
B. ID を指定せずに USER_NAME を使用する
次の例では、ID を指定せずに、現在のユーザーの名前を検索します。
SELECT USER_NAME();
GO
次に、ユーザーが sysadmin 固定サーバー ロールのメンバーである場合の結果セットを示します。
dbo
C: WHERE 句で USER_NAME を使用する
次の例では、sys.database_principals
の行を検索します。検索される名前は、ユーザー識別番号 USER_NAME
に対してシステム関数 1
を適用した結果と同じになります。
SELECT name FROM sys.database_principals WHERE name = USER_NAME(1);
GO
結果セットは次のようになります。
name
------------------------------
dbo
(1 row(s) affected)
D. EXECUTE AS で偽装中に USER_NAME を呼び出す
次の例では、権限借用中の USER_NAME
の動作を示します。
EXECUTE AS
は現在、Microsoft Fabric ではサポートされていません。
注意事項
EXECUTE AS
を使用してテストする場合は、常に REVERT
をスクリプトしてその後に続けてください。
SELECT USER_NAME();
GO
EXECUTE AS USER = 'Zelig';
GO
SELECT USER_NAME();
GO
REVERT;
GO
SELECT USER_NAME();
GO
結果セットは次のようになります。
-------------
dbo
-------------
Zelig
-------------
dbo
例: Azure Synapse Analytics、Analytics Platform System (PDW)
E. ID を指定せずに USER_NAME を使用する
次の例では、ID を指定せずに、現在のユーザーの名前を検索します。
SELECT USER_NAME();
これは現在のログイン ユーザーの結果セットです。
User7
F. WHERE 句で USER_NAME を使用する
次の例では、sysusers
の行を検索します。検索される名前は、ユーザー識別番号 USER_NAME
に対してシステム関数 1
を適用した結果と同じになります。
SELECT name FROM sysusers WHERE name = USER_NAME(1);
結果セットは次のようになります。
name
------------------------------
User7