ID と SID
新規 : 2006 年 4 月 14 日
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 (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 |
ユーザー、ロール、アプリケーション ロール、別名 |
SQL Server 2005 では、ユーザー ID のサイズが smallint (16 ビット) から int (32 ビット) に増加しています。16 ビットのユーザー ID を必要とする API は、32 ビットのユーザー ID を渡されると、間違った結果を返します。旧リリースの SQL Server 用に作成したデータやアプリケーションを移行する場合は、コード内で次の非推奨のインターフェイスが参照されていないかどうかを確認する必要があります。
- sysusers
- syscacheobjects
- sysmembers
- sysobjects
- syspermissions
- sysprocesses
- sysprotects
- systypes
- USER_ID
これらのインターフェイスには、16 ビットのユーザー ID が必要です。32 ビットのユーザー ID で使用すると、正しい結果を返しません。
参照
概念
その他の技術情報
sys.server_principals (Transact-SQL)
sys.database_principals (Transact-SQL)
USER_ID (Transact-SQL)
SUSER_SID (Transact-SQL)
CREATE LOGIN (Transact-SQL)
CREATE USER (Transact-SQL)