다음을 통해 공유


내장형 데이터베이스 사용자 - 데이터베이스의 이동성 증가

포함된 데이터베이스 사용자를 사용하여 데이터베이스 수준에서 SQL Server 및 SQL Database의 연결을 인증합니다. 포함된 데이터베이스는 다른 데이터베이스와 데이터베이스를 호스트하는 SQL Server/SQL Database(및 master 데이터베이스) 인스턴스에서 격리된 데이터베이스입니다. SQL Server는 Windows 및 SQL Server 인증에 포함된 데이터베이스 사용자를 지원합니다. SQL Database를 사용하는 경우 포함된 데이터베이스 사용자를 데이터베이스 수준 방화벽 규칙과 결합합니다. 이 항목에서는 기존 로그인/사용자 모델 및 Windows 또는 서버 수준 방화벽 규칙에 비해 포함된 데이터베이스 모델 사용의 차이점과 이점을 검토합니다. 특정 시나리오, 관리 효율성 또는 애플리케이션 비즈니스 논리는 여전히 기존 로그인/사용자 모델 및 서버 수준 방화벽 규칙을 사용해야 할 수 있습니다.

비고

Microsoft가 SQL Database 서비스를 발전시키고 보장된 SLA를 높이려면 포함된 데이터베이스 사용자 모델 및 데이터베이스 범위 방화벽 규칙으로 전환하여 지정된 데이터베이스에 대한 고가용성 SLA 및 더 높은 최대 로그인 속도를 달성해야 할 수 있습니다. Microsoft는 현재 이러한 변경 사항을 고려하는 것이 좋습니다.

기존 로그인 및 사용자 모델

기존 연결 모델에서 Windows 사용자 또는 Windows 그룹의 구성원은 Windows에서 인증된 사용자 또는 그룹 자격 증명을 제공하여 데이터베이스 엔진에 연결합니다. 또는 연결은 이름과 암호를 모두 제공하고 SQL Server 인증을 사용하여 연결합니다(SQL Database에 연결할 때 유일한 옵션임). 두 경우 모두 마스터 데이터베이스에 연결 자격 증명과 일치하는 로그인이 있어야 합니다. 데이터베이스 엔진이 Windows 인증 자격 증명을 확인하거나 SQL Server 인증 자격 증명을 인증한 후 연결은 일반적으로 사용자 데이터베이스에 연결을 시도합니다. 사용자 데이터베이스에 연결하려면 로그인을 사용자 데이터베이스의 데이터베이스 사용자(즉, 연결된)에 매핑할 수 있어야 합니다. 연결 문자열은 SQL Server에서 선택 사항이지만 SQL Database에 필요한 특정 데이터베이스에 대한 연결을 지정할 수도 있습니다.

중요한 주체는 로그인(마스터 데이터베이스)과 사용자(사용자 데이터베이스)가 모두 존재하고 서로 관련되어야 한다는 것입니다. 즉, 사용자 데이터베이스에 대한 연결은 master 데이터베이스의 로그인에 대한 종속성을 가지며, 이렇게 하면 다른 호스팅 SQL Server 또는 Azure SQL Database 서버로 데이터베이스를 이동할 수 있는 기능이 제한됩니다. 어떤 이유로든 마스터 데이터베이스에 대한 연결을 사용할 수 없는 경우(예: 장애 조치(failover) 진행 중) 전체 연결 시간이 늘어나거나 연결 시간이 초과될 수 있습니다. 따라서 연결 확장성을 줄일 수 있습니다.

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

포함된 데이터베이스 사용자 모델에서 master 데이터베이스의 로그인이 없습니다. 대신 인증 프로세스가 사용자 데이터베이스에서 일어나며 사용자 데이터베이스에 포함된 데이터베이스 사용자는 master 데이터베이스에 연관된 로그인을 갖지 않습니다. 포함된 데이터베이스 사용자 모델은 WINDOWS 인증(SQL Server) 및 SQL Server 인증(SQL Server 및 SQL Database 모두)을 모두 지원합니다. 포함된 데이터베이스 사용자로 연결하려면 데이터베이스 엔진이 인증 프로세스를 관리하는 데이터베이스를 알 수 있도록 연결 문자열에 항상 사용자 데이터베이스에 대한 매개 변수가 포함되어야 합니다. 포함된 데이터베이스 사용자의 활동은 인증 데이터베이스로 제한되므로 포함된 데이터베이스 사용자로 연결할 때 사용자가 필요로 하는 각 데이터베이스에서 데이터베이스 사용자 계정을 독립적으로 만들어야 합니다. 데이터베이스를 변경하려면 SQL Database 사용자가 새 연결을 만들어야 합니다. 동일한 사용자가 다른 데이터베이스에 있는 경우 SQL Server의 포함된 데이터베이스 사용자는 데이터베이스를 변경할 수 있습니다.

SQL Database의 경우 기존 모델에서 포함된 데이터베이스 사용자 모델로 전환할 때 연결 문자열을 변경할 필요가 없습니다. SQL Server 연결의 경우 데이터베이스 이름이 아직 없는 경우 연결 문자열에 추가해야 합니다.

중요합니다

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

방화벽

SQL Server

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

SQL Database 방화벽

SQL Database는 서버 수준 연결(로그인) 및 데이터베이스 수준 연결(포함된 데이터베이스 사용자)에 대해 별도의 방화벽 규칙을 허용합니다. 사용자 데이터베이스에 연결할 때 첫 번째 데이터베이스 방화벽 규칙이 검사됩니다. 데이터베이스에 대한 액세스를 허용하는 규칙이 없으면 서버 수준 방화벽 규칙이 선택되어 논리 서버 마스터 데이터베이스에 액세스해야 합니다. 포함된 데이터베이스 사용자와 결합된 데이터베이스 수준 방화벽 규칙은 연결 중에 서버의 마스터 데이터베이스에 액세스할 필요가 없도록 하여 연결 확장성을 향상시킬 수 있습니다.

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';
기존 모델 포함된 데이터베이스 사용자 모델
마스터 DB의 컨텍스트에서 암호를 변경하려면 다음을 수행합니다.

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

ALTER USER user_name WITH PASSWORD = 'strong_password';

비고

  • SQL Server에서 제한된 데이터베이스 사용자는 SQL Server 인스턴스에 대해 활성화해야 합니다. 자세한 내용은 내포된 데이터베이스 인증 서버 구성 옵션을 참조하세요.

  • 포함된 데이터베이스 사용자 및 겹치지 않는 이름의 로그인은 애플리케이션에 공존할 수 있습니다.

  • name1이 있는 master 데이터베이스에 로그인이 있고 name1이라는 포함된 데이터베이스 사용자를 만드는 경우 연결 문자열에 데이터베이스 이름이 제공되면 데이터베이스에 연결할 때 데이터베이스 사용자의 컨텍스트가 로그인 컨텍스트를 통해 선택됩니다. 즉, 데이터베이스 내 포함된 사용자가 동일한 이름의 로그인보다 우선합니다.

  • SQL Database에서 포함된 데이터베이스 사용자의 이름은 서버 관리자 계정의 이름과 같을 수 없습니다.

  • SQL Database 서버 관리자 계정은 포함된 데이터베이스 사용자가 될 수 없습니다. 서버 관리자는 포함된 데이터베이스 사용자를 만들고 관리할 수 있는 충분한 권한이 있습니다. 서버 관리자는 사용자 데이터베이스에 포함된 데이터베이스 사용자에게 권한을 부여할 수 있습니다.

  • 포함된 데이터베이스 사용자는 데이터베이스 수준의 주체들 때문에, 이를 사용할 모든 데이터베이스에 포함된 데이터베이스 사용자를 생성해야 합니다. ID는 데이터베이스에 국한되며 동일한 서버의 다른 데이터베이스에서 동일한 이름과 동일한 암호를 가진 사용자의 모든 측면에서 독립적입니다.

  • 일반적으로 로그인에 사용하는 것과 동일한 강도의 암호를 사용합니다.

또한 참조하십시오

포함된 데이터베이스
포함된 데이터베이스의 보안 모범 사례
CREATE USER(Transact-SQL)