비관리자용 사용자 인스턴스
사용자 인스턴스는 비관리자가 해당 계정으로 SQL Server의 로컬 버전을 실행할 수 있게 해주는 기능입니다. 사용자 인스턴스를 사용하면 비관리자는 해당 계정으로 실행 중인 인스턴스에 대해 데이터베이스 소유자 권한을 갖게 됩니다.
중요 |
---|
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오. |
자식 인스턴스 또는 클라이언트 인스턴스라고도 하는 사용자 인스턴스는 부모 인스턴스(sqlExpress와 같이 서비스로 실행되는 주 인스턴스)가 사용자 대신 생성하는 SQL Server 인스턴스입니다. 사용자 인스턴스는 해당 사용자의 보안 컨텍스트에서 사용자 프로세스로 실행됩니다. 사용자 인스턴스는 부모 인스턴스 및 컴퓨터에서 실행되는 그 밖의 사용자 인스턴스로부터 격리됩니다. 사용자 인스턴스 기능을 "RANU(일반 사용자로 실행)"라고도 합니다.
[!참고]
일관성을 위해 SQL Server Express 온라인 설명서에서는 이 기능을 사용자 인스턴스라고 합니다. 또한 이 기능은 SQL Server 2005 Express Edition에서 처음 사용되었습니다.
사용자 인스턴스 사용 이유
아래에는 사용자 인스턴스 모델 사용 시 이점에 대한 몇 가지 이유를 설명합니다.
사용자 인스턴스 모델의 주 목적은 SQL Server의 관리자가 아닌 사용자를 서로 격리시켜 다른 사용자를 손상시키지 않고 임의 데이터베이스를 연결할 수 있게 하는 것입니다. 각 사용자에 대해 별도의 SQL Server 인스턴스를 생성하면 이러한 격리가 구성됩니다.
격리 외에도 SQL Server Express는 관리자가 아닌 사용자의 사용 편의를 목적으로 합니다. 대부분의 Windows 사용자는 관리 권한이 있는 계정을 가지고 있습니다. 그러나 관리자로 실행할 경우 악성 소프트웨어가 쉽게 사용자 컴퓨터를 제어할 수 있습니다. 관리자가 아닌 사용자로 실행한 악성 소프트웨어는 시스템 전체 변경을 수행할 수 없으므로 손상 범위가 제한됩니다.
사용자 인스턴스 개요
사용자 인스턴스 모델은 다음과 같이 요약할 수 있습니다.
사용자 인스턴스를 생성하려면 SQL Server의 부모 인스턴스가 실행되고 있어야 합니다.
SQL Server Express를 설치할 때마다 호출 시 사용자 인스턴스 프로세스에서 사용할 무결한 시스템 데이터베이스를 저장하는 Template Data 폴더가 생성됩니다.
사용자 인스턴스를 호출하려면 SQLClient의 user instance 연결 문자열 키워드를 사용합니다. 이 키워드는 true 또는 false가 될 수 있으며 기본값은 false입니다. false로 설정하면 사용자 인스턴스 지원이 적용되지 않고 원래 동작이 유지됩니다. user instance를 true로 설정하면 ADO .NET connection.open 호출 중에 사용자 인스턴스 모델이 활성화됩니다.
[!참고]
System.Data.SqlClient 네임스페이스는 SQL Server 데이터베이스에 대한 액세스를 가능하게 하고 집합적으로 SQL Server 또는 SqlClient의 .NET 데이터 공급자라고 불리는 클래스 집합을 정의합니다. 관리되는 응용 프로그램은 ADO .NET API를 통해 SqlClient와 상호 작용하여 SQL Server 데이터베이스에 저장된 데이터와 스키마 정보를 쿼리 및 조작합니다. 자세한 내용은 Visual Studio 2005 설명서를 참조하십시오.
임의 사용자에 대해 처음으로 사용자 인스턴스를 생성하면 사용자 인스턴스의 배타적 사용을 위해 Template Data 폴더의 시스템 데이터베이스가 해당 사용자의 로컬 응용 프로그램 데이터 리포지토리 디렉터리 아래 경로로 복사됩니다. 이 경로는 일반적으로 drive:\Documents and Settings\Username\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS입니다.
사용자는 SysAdmin으로 새 사용자 인스턴스에 연결하며 해당 사용자가 부모 인스턴스의 관리자가 아닌 경우에도 데이터베이스를 사용합니다.
보안 정보 설치하는 동안 sysadmin 고정 서버 역할의 멤버로 프로비전된 로그인은 템플릿 데이터베이스에서 관리자로 프로비전됩니다. 또한 삭제하지 않는 한 사용자 인스턴스에서 sysadmin 고정 서버 역할의 멤버입니다.
사용자 인스턴스가 생성되면 SQLClient는 모든 호출을 사용자 인스턴스로 리디렉션합니다.
[!참고]
사용자 데이터베이스는 파일 시스템 특성과 데이터베이스에 대한 주 파일의 사용 권한을 기반으로 READONLY 속성을 파생시킵니다. ALTER DATABASE SET READ_ONLY/READ_WRITE 설정은 적용되지 않습니다.
사용자 인스턴스 사용을 위한 연결 문자열
conn string =
"Data Source=.\\SQLExpress" +
"integrated security=true;" +
"attachdbfilename=|DataDirectory|\mydb.mdf;" +
"user instance=true"
string connstr = GetConnectionString(); // get from config
using(SqlConnection conn = new SqlConnection(connstr)) {
// this will connect to the user instance, not to the
// default SSE instance
conn.Open();
// use the connection to the user instance
}
사용자 인스턴스에 연결
사용자 인스턴스에 대한 네트워크 프로토콜 지원은 로컬 명명된 파이프를 통해서만 제공되므로 사용자는 원격 컴퓨터에서 사용자 인스턴스에 연결할 수 없습니다.
SQL Server Management Studio를 사용하여 사용자 인스턴스에 연결하는 방법은 SQL Server Express 온라인 설명서에서 "SQL Server Management Studio 및 SQL Server Express"를 참조하십시오.
[!참고]
명명된 파이프나 네트워크 프로토콜에 대한 자세한 내용은 SQL Server 구성 관리자 도움말을 참조하십시오. 이 도움말에 액세스하려면 시작 메뉴에서 실행을 클릭한 다음 SQLServerManager.msc를 입력합니다. SQL Server 구성 관리자가 열립니다. 도움말에 액세스하려면 도움말 메뉴를 클릭합니다. SQL Server에 대한 네트워크 프로토콜을 보려면 SQL Server 네트워크 구성을 클릭합니다.
사용자 인스턴스 관리
다음 정보는 관리자가 사용자 인스턴스를 관리하려는 경우에 유용합니다.
뷰/저장 프로시저/Transact-SQL |
설명 |
---|---|
Select * from sys.dm_os_child_instances(Transact-SQL) |
부모 인스턴스에서 생성된 사용자 인스턴스를 모두 표시하는 가상 뷰를 실행할 수 있습니다. |
SHUTDOWN |
SQL Server를 중지합니다. 이 명령을 사용하여 사용자 인스턴스를 중지할 수 있습니다. SHUTDOWN 사용법은 SQL Server 온라인 설명서에서 SHUTDOWN (Transact-SQL)을 참조하십시오. |
sp_configure 'user instances enabled' |
사용자 인스턴스 기능의 설정 또는 해제를 제어합니다. 사용자 인스턴스 생성을 설정하려면 다음을 사용합니다.
RECONFIGURE; GO 사용자 인스턴스 생성을 해제하려면 다음을 사용합니다.
|
sp_configure 'user instance timeout' |
다음을 사용합니다. sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'user instance timeout', 5; GO 여기서 5는 최소값이고 65535는 최대값입니다. 제한 시간을 보고 설정하려면 sp_configure 'show advanced options'가 필요합니다. show advanced options에 대한 자세한 내용은 SQL Server 온라인 설명서에서 서버 구성 옵션 설정을 참조하십시오. 부모 인스턴스와 사용자 인스턴스 둘 다에서 user instance timeout을 설정할 수 있습니다. 사용자 인스턴스는 시작 시 항상 부모 인스턴스에서 제한 시간 값을 가져옵니다. 그러나 사용자 인스턴스가 시작되고 나면 sp_configure를 사용하여 이 특정 인스턴스에만 유효한 제한 시간 값을 변경할 수 있습니다. |
사용자 인스턴스 사용 시 제한 사항
사용자 인스턴스를 사용하는 경우 일부 SQL Server Express 기능이 예상대로 작동하지 않을 수 있습니다. 다음 목록에서는 발생할 수 있는 제한 사항에 대해 설명합니다.
각 사용자가 하나의 사용자 인스턴스만 가질 수 있습니다.
복제가 해제됩니다.
사용자 인스턴스에서 SQL Server 인증을 지원하지 않으며 Windows 인증만 지원됩니다.
사용자 인스턴스에 대한 네트워크 프로토콜 지원은 로컬 명명된 파이프에만 해당됩니다.
사용자 인스턴스는 부모 인스턴스의 레지스트리 항목을 공유합니다.
네이티브 코드가 있는 사용자 인스턴스는 지원하지 않습니다. 이 기능은 ADO .NET에서만 지원됩니다.
SQL Server Express 사용자 인스턴스에서는 전체 텍스트 검색이 지원되지 않습니다.
동적으로 생성된 사용자 인스턴스에서는 서버 이벤트용 WMI 공급자가 지원되지 않습니다. 그러나 부모 SQL Server Express 인스턴스에서는 이 공급자가 여전히 작동합니다. WMI 공급자에 대한 자세한 내용은 SQL Server 온라인 설명서에서 WMI Provider for Server Events를 참조하십시오.