次の方法で共有


SUSER_SID(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

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

Transact-SQL 構文表記規則

構文

SUSER_SID ( [ 'login' ] [ , Param2 ] )

引数

'* ログイン *'

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン

ユーザーのログイン名。 loginsysname です。 login は省略可能で、SQL Server ログインか、Microsoft Windows ユーザーまたはグループを指定できます。 login の指定を省略すると、現在のセキュリティ コンテキストについての情報が返されます。 パラメーターに NULLが含まれている場合、 SUSER_SIDNULLを返します。

Param2

適用対象: SQL Server 2012 (11.x) 以降のバージョン

ログイン名を検証するかどうかを指定します。 Param2 のデータ型は int で、省略可能です。 Param2 が 0 の場合、ログイン名は検証されません。 Param2 で 0 が指定されていない場合、Windows ログイン名と SQL Server に格納されたログイン名がまったく同じであるかどうかが確認されます。

戻り値の型

varbinary(85)

解説

SUSER_SIDは、DEFAULTまたはALTER TABLECREATE TABLE制約として使用できます。 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 Database、Fabric の 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 2012 (11.x) 以降のバージョン

次の例では、SQL Server sa ログインのセキュリティ ID 番号を返します。

SELECT SUSER_SID('sa');
GO

C. Windows ユーザー名でSUSER_SIDを使用する

適用対象: SQL Server 2012 (11.x) 以降のバージョン

次の例では、Windows ユーザーである London\Workstation1 のセキュリティ ID 番号を返します。

SELECT SUSER_SID('London\Workstation1');
GO

D. DEFAULT 制約としてSUSER_SIDを使用する

次の例では、SUSER_SID ステートメントで DEFAULTCREATE 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 に格納されているログイン名を比較する

適用対象: SQL Server 2012 (11.x) 以降のバージョン

次の例は、Param2 を使用して Windows から SID を取得する方法を示しています。この例では、その SID を SUSER_SNAME 関数への入力として使用しています。 Windows に格納された形式 (TestComputer\User) でログインを指定し、SQL Server に格納された形式 (TESTCOMPUTER\User) のログインを取得しています。

SELECT SUSER_SNAME(SUSER_SID('TestComputer\User', 0));