다음을 통해 공유


포함된 데이터베이스를 사용하여 데이터베이스를 이식성 있게 만들

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics

포함된 데이터베이스 사용자를 사용하여 데이터베이스 수준에서 SQL Server 및 Azure SQL Database의 연결을 인증합니다. 포함된 데이터베이스는 다른 데이터베이스 및 해당 데이터베이스를 호스팅하는 SQL Server 또는 SQL Database (및 master 데이터베이스) 인스턴스에서 격리된 데이터베이스입니다.

SQL Server는 Windows 및 SQL Server 인증에 포함된 데이터베이스 사용자를 지원합니다. SQL Database를 사용하는 경우 포함된 데이터베이스 사용자를 데이터베이스 수준 방화벽 규칙과 결합합니다.

이 문서에서는 기존 로그인/사용자 모델 및 Windows 또는 서버 수준 방화벽 규칙에 비해 포함된 데이터베이스 모델을 사용할 때의 이점을 검토합니다. 특정 시나리오, 관리 효율성 또는 애플리케이션 비즈니스 논리는 여전히 기존 로그인/사용자 모델 및 서버 수준 방화벽 규칙을 사용해야 할 수 있습니다.

기존 로그인 및 사용자 모델

기존 연결 모델에서 Windows 사용자 또는 Windows 그룹의 구성원은 Windows에서 인증된 사용자 또는 그룹 자격 증명을 제공하여 데이터베이스 엔진 연결합니다. 또는 사용자가 이름과 비밀번호를 모두 제공하고 SQL Server 인증을 사용하여 연결할 수도 있습니다. 두 경우 모두 마스터 데이터베이스에 연결 자격 증명과 일치하는 로그인이 있어야 합니다.

데이터베이스 엔진 Windows 인증 자격 증명을 확인하거나 SQL Server 인증 자격 증명을 인증한 후 연결은 일반적으로 사용자 데이터베이스에 연결을 시도합니다. 사용자 데이터베이스에 연결하려면 로그인은 사용자 데이터베이스에 포함된 데이터베이스 사용자와 매핑(즉, 연결)되어야 합니다. 연결 문자열 SQL Server에서 선택 사항이지만 SQL Database에 필요한 특정 데이터베이스에 대한 연결을 지정할 수도 있습니다.

중요한 원칙은 로그인(master 데이터베이스)과 사용자(사용자 데이터베이스)가 모두 존재하고 서로 관련되어야 한다는 것입니다. 사용자 데이터베이스에 대한 연결은 master 데이터베이스의 로그인에 종속됩니다. 이 종속성은 다른 호스팅 SQL Server 인스턴스 또는 Azure SQL Database 서버로 데이터베이스를 이동하는 기능을 제한합니다.

master 데이터베이스에 대한 연결을 사용할 수 없는 경우(예: 장애 조치(failover)가 진행 중) 전체 연결 시간이 늘어나거나 연결 시간이 초과될 수 있습니다. 연결을 사용할 수 없는 경우 연결 확장성이 저하될 수 있습니다.

포함된 데이터베이스 사용자 모델

포함된 데이터베이스 사용자 모델에서 master 데이터베이스의 로그인은 존재하지 않습니다. 대신 인증 프로세스는 사용자 데이터베이스에서 발생합니다. 사용자 데이터베이스의 데이터베이스 사용자에게는 master 데이터베이스에 연결된 로그인이 없습니다.

포함된 데이터베이스 사용자 모델은 Windows 인증 및 SQL Server 인증을 모두 지원합니다. SQL Server와 SQL Database 모두에서 사용할 수 있습니다.

포함된 데이터베이스 사용자로 연결하려면 연결 문자열 항상 사용자 데이터베이스에 대한 매개 변수를 포함해야 합니다. 데이터베이스 엔진 이 매개 변수를 사용하여 인증 프로세스를 관리하는 데이터베이스를 파악합니다.

포함된 데이터베이스 사용자의 활동은 인증 데이터베이스로 제한됩니다. 데이터베이스 사용자 계정은 사용자가 필요로 하는 각 데이터베이스에서 독립적으로 만들어야 합니다. 데이터베이스를 변경하려면 SQL Database 사용자가 새 연결을 만들어야 합니다. 동일한 사용자가 다른 데이터베이스에 있는 경우 SQL Server의 포함된 데이터베이스 사용자는 데이터베이스를 변경할 수 있습니다.

Azure에서 SQL Database 및 Azure Synapse Analytics는 포함된 데이터베이스 사용자로 Microsoft Entra ID(이전의 Azure Active Directory)의 ID를 지원합니다. SQL Database는 SQL Server 인증을 사용하는 포함된 데이터베이스 사용자를 지원하지만 Azure Synapse Analytics는 지원하지 않습니다. 자세한 내용은 Microsoft Entra 인증을 사용하여 SQL Database에 연결을 참조하세요.

Microsoft Entra 인증을 사용하는 경우 사용자는 Microsoft Entra 유니버설 인증을 사용하여 SQL Server Management Studio에서 연결할 수 있습니다. 관리자는 전화 통화, 문자 메시지, PIN을 사용하는 스마트 카드, 모바일 앱 알림을 사용하여 ID를 확인하는 Multi-Factor Authentication이 필요하도록 유니버설 인증을 구성할 수 있습니다. 자세한 내용은 Microsoft Entra 다단계 인증 사용을 참조하세요.

SQL Database 및 Azure Synapse Analytics의 경우 데이터베이스 이름은 항상 연결 문자열 필요합니다. 따라서 기존 모델에서 포함된 데이터베이스 사용자 모델로 전환할 때 연결 문자열 변경할 필요가 없습니다. SQL Server 연결은 데이터베이스 이름이 (이미 존재하지 않는 경우) 연결 문자열에 반드시 추가되어야 합니다.

Important

기존 모델을 사용하는 경우 서버 수준 역할 및 서버 수준 권한은 모든 데이터베이스에 대한 액세스를 제한할 수 있습니다. 포함된 데이터베이스 모델을 사용하는 경우 ALTER ANY USER 권한이 있는 데이터베이스 소유자 및 데이터베이스 사용자는 데이터베이스에 대한 액세스 권한을 부여할 수 있습니다. 이 권한은 고급 권한 서버 로그인의 액세스 제어를 줄이고 고급 권한 데이터베이스 사용자에 대한 액세스 제어를 확장합니다.

방화벽

SQL Server

SQL Server의 경우 Windows 방화벽 규칙은 모든 연결에 적용되며 로그인(기존 모델 연결) 및 포함된 데이터베이스 사용자에게 동일한 영향을 줍니다. Windows 방화벽에 대한 자세한 내용은 데이터베이스 엔진 액세스에 대한 Windows 방화벽 구성을 참조하세요.

SQL 데이터베이스 방화벽

SQL Database는 여러 수준 연결(로그인) 및 데이터베이스 수준 연결(포함된 데이터베이스 사용자)에 대해 별도의 방화벽 규칙을 허용합니다. SQL Database가 사용자 데이터베이스에 연결되면 먼저 데이터베이스 방화벽 규칙을 확인합니다. 데이터베이스에 대한 액세스를 허용하는 규칙이 없는 경우 SQL Database는 서버 수준 방화벽 규칙을 확인합니다. 서버 수준 방화벽 규칙을 확인하려면 SQL Database 서버의 master 데이터베이스에 액세스해야 합니다.

포함된 데이터베이스 사용자와 결합된 데이터베이스 수준 방화벽 규칙은 연결 중에 서버의 master 데이터베이스에 액세스할 필요가 없습니다. 그 결과 연결 확장성이 향상됩니다.

SQL Database 방화벽 규칙에 대한 자세한 내용은 다음 항목을 참조하세요.

구문 차이

전통적 모델 포함된 데이터베이스 사용자 모델
master 데이터베이스에 연결된 경우:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

사용자 데이터베이스에 연결하는 경우:

CREATE USER 'user_name' FOR LOGIN 'login_name';
사용자 데이터베이스에 연결하는 경우:

CREATE USER user_name WITH PASSWORD = 'strong_password';
전통적 모델 포함된 데이터베이스 사용자 모델
master 데이터베이스 컨텍스트에서 암호를 변경하려면 다음을 수행합니다.

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
사용자 데이터베이스의 컨텍스트에서 암호를 변경하려면 다음을 수행합니다.

ALTER USER user_name WITH PASSWORD = 'strong_password';

SQL Managed Instance

Azure SQL Managed Instance는 포함된 데이터베이스의 컨텍스트에서 SQL Server 온-프레미스처럼 동작합니다. 포함된 사용자를 만드는 경우 데이터베이스 컨텍스트를 master 데이터베이스에서 사용자 데이터베이스로 변경해야 합니다. 또한 포함 옵션을 설정할 때 사용자 데이터베이스에 대한 활성 연결이 없어야 합니다. 다음 코드를 가이드로 사용하세요.

Warning

다음 샘플 스크립트는 kill 문을 사용하여 데이터베이스의 모든 사용자 프로세스를 닫습니다. 이 스크립트의 결과를 이해하고 실행하기 전에 비즈니스에 적합한지 확인합니다. 또한 스크립트가 데이터베이스에서 실행되는 다른 프로세스를 방해하므로 SQL Managed Instance 데이터베이스에서 다른 연결이 활성화되지 않았는지 확인합니다.

USE master;

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

DECLARE @kill_string varchar(8000) = '';
SELECT @kill_string = @kill_string + 'KILL ' + str(session_id) + '; '  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test') and is_user_process = 1;

EXEC(@kill_string);
GO

sp_configure 'contained database authentication', 1;  
GO
 
RECONFIGURE;  
GO 

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

ALTER DATABASE Test
SET containment=partial

USE Test;  
GO 

CREATE USER Carlo  
WITH PASSWORD='Enterpwdhere*'  

SELECT containment_desc FROM sys.databases
WHERE name='Test'

설명

  • SQL Server에서 포함된 데이터베이스 사용자는 각 인스턴스에 대해 설정되어야 합니다. 자세한 내용은 contained database authentication (서버 구성 옵션)을 참조하세요.
  • 포함된 데이터베이스 사용자 및 겹치지 않는 이름의 로그인은 애플리케이션에서 공존할 수 있습니다.
  • master 데이터베이스의 로그인에 name1이라는 이름이 있다고 가정합니다. name1이라는 포함된 데이터베이스 사용자를 만드는 경우 연결 문자열 데이터베이스 이름이 제공되면 데이터베이스에 연결하기 위해 로그인 컨텍스트를 통해 데이터베이스 사용자의 컨텍스트가 선택됩니다. 즉, 포함된 데이터베이스 사용자가 동일한 이름을 가진 로그인보다 우선합니다.
  • SQL Database 에서 포함된 데이터베이스 사용자의 이름은 서버 관리자 계정의 이름과 같을 수 없습니다.
  • SQL Database 서버 관리자 계정은 포함된 데이터베이스 사용자가 될 수 없습니다. 서버 관리자는 포함된 데이터베이스 사용자를 만들고 관리할 수 있는 충분한 권한이 있습니다. 서버 관리자는 사용자 데이터베이스에 포함된 데이터베이스 사용자에게 권한을 부여할 수 있습니다.
  • 포함된 데이터베이스 사용자는 데이터베이스 수준 보안 주체이므로 이를 사용할 모든 데이터베이스에 포함된 데이터베이스 사용자를 만들어야 합니다. ID는 데이터베이스로 제한됩니다. ID는 동일한 서버의 다른 데이터베이스에서 동일한 이름과 동일한 암호를 가진 사용자와 독립적입니다(모든 측면에서).
  • 일반적으로 사용하는 것과 동일한 강도의 암호를 사용하여 로그인합니다.