SID および ID

SQL Server エンジンを操作するコードを記述する場合、プリンシパルの内部表現として使用される 2 つの数値に注意する必要があります。すべてのプリンシパルには、ID とセキュリティ ID (SID) があります。これらの数値の意味およびソースは、プリンシパルがどのように作成されたか、およびサービス プリンシパルとデータベース プリンシパルのどちらであるかによって異なります。

サーバー レベルの ID 番号

SQL Server ログインが作成されると、ID および SID が割り当てられます。ID および SID は、sys.server_principals カタログ ビューで principal_id および SID として確認できます。ID (principal_id) は、そのログインをサーバー内部でセキュリティ保護可能なログインとして識別します。ID は、ログイン作成時に SQL Server によって割り当てられます。ログインが削除されると、その ID 番号は再利用されます。SID は、ログインのセキュリティ コンテキストを識別し、サーバー インスタンス内で一意です。SID のソースは、ログインの作成方法によって異なります。ログインが Windows ユーザーまたはグループから作成されると、このログインには、元のプリンシパルの Windows SID が指定されます。Windows SID はドメイン内で一意です。SQL Server ログインが証明書または非対称キーから作成されると、公開キーの SHA-1 ハッシュから派生した SID が割り当てられます。パスワードを必要とする従来型の SQL Server ログインとして作成されると、サーバーで SID が生成されます。

データベース レベルの ID 番号

データベース ユーザーが作成されると、ID とセキュリティ ID (SID) が割り当てられます。これらの数値は、sys.database_principals カタログ ビューで principal_id および SID として確認できます。ID は、そのユーザーをデータベース内部でセキュリティ保護可能なユーザーであると識別します。データベース ユーザーが削除されると、その ID 番号は再利用されます。データベース ユーザーに割り当てられた SID はデータベース内で一意です。SID のソースは、データベース ユーザーの作成方法によって異なります。ユーザーが SQL Server ログインから作成されると、ユーザーにはログインの SID が指定されます。ユーザーが証明書または非対称キーから作成されると、SID は公開キーの SHA-1 ハッシュから派生します。

データベース ユーザーの最大数

データベース ユーザーの最大数は、ユーザー ID フィールドのサイズによって決まります。ユーザー ID の値には、0 または正の整数を指定する必要があります。SQL Server 2000 では、ユーザー ID は、16 ビット (そのうち 1 ビットは符号) で構成される smallint として格納されます。このため、SQL Server 2000 のユーザー ID の最大数は 32,768 (215) です。SQL Server 2005 以降のバージョンでは、ユーザー ID は、32 ビット (そのうち 1 ビットは符号) で構成される int として格納されます。このように追加されたビットにより、2,147,483,648 (231) 個の ID 番号を割り当てることができます。

データベース ユーザー ID は、次の表に示すように、事前に割り当てられた範囲に分類されます。

SQL Server 2000 の ID

SQL Server 2005 の ID

割り当て先

0

0

public

1

1

dbo

2

2

guest

3

3

INFORMATION_SCHEMA

4

4

SYSTEM_FUNCTION_SCHEMA

5 - 16383

5 - 16383

ユーザー、別名、アプリケーション ロール

16384

16384

db_owner

16385

16385

db_accessadmin

16386

16386

db_securityadmin

16387

16387

db_ddladmin

16389

16389

db_backupoperator

16390

16390

db_datareader

16391

16391

db_datawriter

16392

16392

db_denydatareader

16393

16393

db_denydatawriter

16394 - 16399

16394 - 16399

予約済み

16400 - 32767

ロール

16400 - 2,147,483,647

ユーザー、ロール、アプリケーション ロール、別名

ユーザー ID のサイズが smallint (16 ビット) から int (32 ビット) に増加しています。16 ビットのユーザー ID を必要とする API は、32 ビットのユーザー ID を渡されると、正しい結果を返しません。SQL Server 2000 以前のバージョン向けに作成されたデータとアプリケーションを移行する場合は、コード内で次の非推奨のインターフェイスが参照されていないかどうかを確認する必要があります。

  • sysusers

  • syscacheobjects

  • sysmembers

  • sysobjects

  • syspermissions

  • sysprocesses

  • sysprotects

  • systypes

  • USER_ID

これらのインターフェイスには、16 ビットのユーザー ID が必要です。32 ビットのユーザー ID で使用すると、正しい結果を返しません。