SUSER_SID (Transact-SQL)
指定されたログイン名のセキュリティ ID 番号 (SID) を返します。
構文
SUSER_SID ( [ 'login' ] [ , Param2 ] )
引数
' login '
ユーザーのログイン名を指定します。 login のデータ型は sysname です。 login は省略可能で、SQL Server ログインか、Microsoft Windows ユーザーまたはグループを指定できます。 login の指定を省略すると、現在のセキュリティ コンテキストについての情報が返されます。 パラメーターに "NULL" という語が含まれていると、NULL が返されます。Param2
ログイン名を検証するかどうかを指定します。 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.
使用例
A. SUSER_SID を使用する
次の例では、SQL Server における sa というログインのセキュリティ ID 番号を返します。
SELECT SUSER_SID('sa');
GO
B. SUSER_SID を Windows ユーザー名と共に使用する
次の例では、Windows ユーザーである London\Workstation1 のセキュリティ ID 番号を返します。
SELECT SUSER_SID('London\Workstation1');
GO
C. SUSER_SID を DEFAULT 制約として使用する
次の例では、CREATE TABLE ステートメントで SUSER_SID を DEFAULT 制約として使用しています。
USE AdventureWorks2012;
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
D. Windows ログイン名と SQL Server に格納されたログイン名を比較する
次の例は、Param2 を使用して Windows から SID を取得する方法を示しています。この例では、その SID を SUSER_SNAME 関数への入力として使用しています。 Windows に格納された形式 (TestComputer\User) でログインを指定し、SQL Server に格納された形式 (TESTCOMPUTER\User) のログインを取得しています。
SELECT SUSER_SNAME(SUSER_SID('TestComputer\User', 0));