SUSER_SID (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
指定されたログイン名のセキュリティ ID 番号 (SID) を返します。
構文
SUSER_SID ( [ 'login' ] [ , Param2 ] )
引数
' login '
適用対象: SQL Server 2008 (10.0.x) 以降
ユーザーのログイン名を指定します。 login は sysname です。 login は省略可能で、SQL Server ログインか、Microsoft Windows ユーザーまたはグループを指定できます。 login の指定を省略すると、現在のセキュリティ コンテキストについての情報が返されます。 パラメーターに "NULL" という語が含まれていると、NULL が返されます。
Param2
適用対象: SQL Server 2012 (11.x) 以降
ログイン名を検証するかどうかを指定します。 Param2 のデータ型は int で、省略可能です。 Param2 が 0 の場合、ログイン名は検証されません。 Param2 で 0 が指定されていない場合、Windows ログイン名と SQL Server に格納されたログイン名がまったく同じであるかどうかが確認されます。
戻り値の型
varbinary(85)
解説
SUSER_SID は、ALTER TABLE または CREATE TABLE の中で、DEFAULT 制約として使用できます。 SUSER_SID は、選択リストの中、WHERE 句の中、また、式を使える所ならどこにでも使用できます。 SUSER_SID の後には、パラメーターを指定しない場合も含め、常にかっこが必要です。
SUSER_SID を引数なしで呼び出すと、現在のセキュリティ コンテキストの SID が返されます。 EXECUTE AS を使用してコンテキストを切り替えたバッチ内で SUSER_SID を引数なしで呼び出すと、権限を借用したコンテキストの SID が返されます。 権限を借用したコンテキストから SUSER_SID(ORIGINAL_LOGIN()) を呼び出すと、元のコンテキストの SID が返されます。
SQL Server 照合順序と Windows 照合順序が異なる場合、SQL Server と Windows ストアでログインを格納する形式が異なると、SUSER_SID は失敗することがあります。 たとえば、Windows コンピューター TestComputer のログインが User で、SQL Server にはそのログインが TESTCOMPUTER\User として格納されている場合、ログイン TestComputer\User を参照したときにログイン名を正しく解決できないことがあります。 このログイン名の検証をスキップするには、Param2 を使用します。 照合順序が異なると、多くの場合、次に示すような SQL Server エラー 15401 が発生します。
Windows NT user or group '%s' not found. Check the name again.
Azure SQL データベース 解説
SUSER_SID では、常に現在のセキュリティ コンテキストのログイン SID が返されます。 別のログインの SID を取得するには、sys.database_principals を使用します。
SUSER_SID ステートメントでは、EXECUTE AS で借用したセキュリティ コンテキストを使用した実行はサポートされません。
例
A. SUSER_SID を使用する
次の例では、現在のセキュリティ コンテキストのセキュリティ ID 番号 (SID) を返します。
SELECT SUSER_SID();
B. SUSER_SID を特定のログインと共に使用する
次の例では、SQL Server sa
ログインのセキュリティ ID 番号を返します。
適用対象: SQL Server 2012 (11.x) 以降
SELECT SUSER_SID('sa');
GO
C. SUSER_SID を Windows ユーザー名と共に使用する
次の例では、Windows ユーザーである London\Workstation1
のセキュリティ ID 番号を返します。
適用対象: SQL Server 2012 (11.x) 以降
SELECT SUSER_SID('London\Workstation1');
GO
D. SUSER_SID を DEFAULT 制約として使用する
次の例では、SUSER_SID
ステートメントで DEFAULT
を CREATE TABLE
制約として使用しています。
USE AdventureWorks2022;
GO
CREATE TABLE sid_example
(
login_sid VARBINARY(85) DEFAULT SUSER_SID(),
login_name VARCHAR(30) DEFAULT SYSTEM_USER,
login_dept VARCHAR(10) DEFAULT 'SALES',
login_date DATETIME DEFAULT GETDATE()
);
GO
INSERT sid_example DEFAULT VALUES;
GO
E. Windows ログイン名と SQL Server に格納されたログイン名を比較する
次の例は、Param2 を使用して Windows から SID を取得する方法を示しています。この例では、その SID を SUSER_SNAME
関数への入力として使用しています。 Windows に格納された形式 (TestComputer\User
) でログインを指定し、SQL Server に格納された形式 (TESTCOMPUTER\User
) のログインを取得しています。
適用対象: SQL Server 2012 (11.x) 以降
SELECT SUSER_SNAME(SUSER_SID('TestComputer\User', 0));
参照
ORIGINAL_LOGIN (Transact-SQL)
CREATE TABLE (Transact-SQL)
binary と varbinary (Transact-SQL)
システム関数 (Transact-SQL)