SID 및 ID
SQL Server 엔진과 상호 작용하는 코드를 작성하는 경우 보안 주체의 내부 표시로 사용되는 두 개의 번호를 알고 있어야 합니다. 모든 보안 주체에는 ID와 SID(보안 ID)가 있습니다. 두 번호의 의미와 원본은 보안 주체의 생성 방법과 서버 보안 주체인지 또는 데이터베이스 보안 주체인지에 따라 달라집니다.
서버 수준 ID 번호
SQL Server 로그인을 만들면 ID와 SID가 할당됩니다. 두 번호는 sys.server_principals 카탈로그 뷰에 principal_id와 SID로 표시됩니다. ID(principal_id)는 로그인을 서버 내의 보안 개체로 식별하며 로그인이 생성될 때 SQL Server에서 할당합니다. 로그인을 삭제하면 해당 ID 번호가 재활용됩니다. SID는 로그인의 보안 컨텍스트를 식별하며 서버 인스턴스 내에서 고유합니다. SID의 원본은 로그인 생성 방법에 따라 달라집니다. Windows 사용자나 그룹에서 로그인을 만들면 원본 보안 주체의 Windows SID가 지정됩니다. Windows SID는 도메인 내에서 고유합니다. 인증서나 비대칭 키에서 SQL Server 로그인을 만들면 공개 키의 SHA-1 해시에서 파생된 SID가 할당됩니다. 로그인을 암호가 필요한 레거시 스타일 SQL Server 로그인으로 만들면 서버에서 SID를 생성합니다.
데이터베이스 수준 ID 번호
데이터베이스 사용자를 만들면 ID 및 SID(보안 ID)가 할당됩니다. 두 번호는 sys.database_principals 카탈로그 뷰에 principal_id와 SID로 표시됩니다. ID는 사용자를 데이터베이스 내의 보안 개체로 식별합니다. 데이터베이스 사용자를 삭제하면 해당 ID가 재활용됩니다. 데이터베이스 사용자에게 할당된 SID는 데이터베이스 내에서 고유합니다. SID의 원본은 데이터베이스 사용자 생성 방법에 따라 달라집니다. SQL Server 로그인에서 사용자를 만들면 해당 로그인의 SID가 지정됩니다. 인증서나 비대칭 키에서 사용자를 만들면 공개 키의 SHA-1 해시에서 SID가 파생됩니다.
최대 데이터베이스 사용자 수
최대 데이터베이스 사용자 수는 사용자 ID 필드의 크기에 의해 결정됩니다. 사용자 ID의 값은 0 또는 양의 정수여야 합니다. SQL Server 2000에서 사용자 ID는 16비트로 구성된 smallint로 저장되며 16비트 중 하나는 부호입니다. 따라서 SQL Server 2000에서 최대 사용자 ID 수는 215 = 32,768입니다. SQL Server 2005 이상 버전에서 사용자 ID가 32비트로 구성된 int로 저장되며 32비트 중 하나는 부호입니다. 이러한 추가 비트를 사용하여 231 = 2,147,483,648개의 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를 사용할 경우 올바른 결과를 반환하지 않습니다.