SUSER_SID (Transact-SQL)

指定されたログイン名のセキュリティ ID 番号 (SID) を返します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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 AdventureWorks2008R2;
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)) ;