Instâncias de usuário para não administradores

Instância de usuário é um recurso que permite que não administradores executem uma versão local do SQL Server na sua própria conta. Com instâncias de usuário, não administradores têm privilégios de proprietário de banco de dados na instância que é executada na sua própria conta. 

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

A instância do usuário, também conhecida como instância filha ou cliente, é uma instância do SQL Server gerada pela instância pai (a instância primária executada como serviço, como o sqlExpress) em nome de um usuário. A instância de usuário é executada como um processo de usuário no contexto de segurança daquele usuário. A instância de usuário é isolada da instância pai e de qualquer outra instância de usuário em execução na máquina. O recurso de instância de usuário também é chamado de "Executar como Usuário Normal (RANU, Run As Normal User)".

ObservaçãoObservação

Por questão de consistência, os Manuais Online do SQL Server Express chamam este recurso de instância de usuário. Não obstante, este recurso foi introduzido pelo SQL Server 2005 Express Edition.

Por que instância de usuário?

Alguns dos motivos que descrevem os benefícios de usar um modelo de instância de usuário são listados a seguir:

  • O principal objetivo do modelo de instância de usuário é propiciar isolamento entre usuários não administradores e o SQL Server, permitindo, assim, que os usuários anexem bancos de dados arbitrários sem o risco de comprometerem outro usuário. Esse isolamento é alcançado porque é gerada uma instância separada do SQL Server para cada usuário.

  • Além de isolamento, outro objetivo do SQL Server Express é proporcionar facilidade de uso por usuários não administradores. Muitos usuários do Windows têm contas com privilégios administrativos. Infelizmente, executar como Administrador facilita que softwares mal-intencionados roubem o comando do computador de um usuário. Contudo, softwares mal-intencionados executados por usuários não administradores não podem fazer alterações de largo alcance no sistema e, logo, causam apenas danos limitados.

Visão geral de instância de usuário

O modelo de instância de usuário pode ser resumido pelos seguintes pontos:

  • Uma instância pai do SQL Server deve estar em execução para gerar instâncias de usuário.

  • Sempre que o SQL Server Express é instalado, a Instalação cria uma pasta Template Data, que armazena bancos de dados de sistema limpos para serem consumidos pelo processo de instância de usuário, se invocado.

  • Para invocar a instância de usuário, use a palavra-chave de cadeia de conexão user instance no SQLClient, que pode ser true ou false e cujo padrão é false. Quando definida como false, nenhum suporte a instâncias de usuário entra em vigor e o comportamento original é preservado. Se user instance for definida como true, o modelo de instância de usuário será ativado durante a chamada connection.open do ADO .NET.

    ObservaçãoObservação

    O namespace System.Data.SqlClient define um conjunto de classes que habilita o acesso ao banco de dados SQL Server e que é coletivamente chamado de Provedor de Dados .NET do SQL Server ou do SqlClient. Aplicativos gerenciados interagem com o SqlClient através da API ADO .NET para consultar e manipular dados e informações de esquema armazenados nos bancos de dados do SQL Server. Para obter mais informações, consulte a documentação do Visual Studio 2005.

  • Na primeira vez em que uma instância de usuário é gerada para algum usuário, os bancos de dados de sistema são copiados da pasta Template Data para um caminho no diretório do repositório de dados de aplicativos local do usuário, para uso exclusivo da instância de usuário. Esse caminho é, normalmente, unidade:\Documents and Settings\Username\Configurações locais\Dados de aplicativos\Microsoft\Microsoft SQL Server Data\SQLEXPRESS.

  • O usuário é conectado a essa nova instância de usuário como SysAdmin e pode usar o banco de dados ainda que não seja um administrador na instância pai.

    Observação sobre segurançaObservação sobre segurança

    Logons provisionados como membros da função de servidor fixa sysadmin durante a instalação são provisionados como administradores no banco de dados modelo. Eles são os membros da função de servidor fixa sysadmin na instância de usuário, a menos que sejam removidos.

  • Quando a instância de usuário é gerada, o SQLClientredireciona todas as chamadas para ela.

ObservaçãoObservação

Os bancos de dados do usuário derivam suas propriedades READONLY segundo os atributos do sistema de arquivos e as permissões de seu arquivo primário. Configurações ALTER DATABASE SET READ_ONLY/READ_WRITE não se aplicam.

Cadeia de conexão para usar uma instância de usuário

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
}

Fazendo a conexão com uma instância de usuário

O suporte a protocolo de rede nas instâncias de usuário se dá, apenas, via pipes nomeados, o que implica que um usuário não consegue se conectar a uma instância de usuário a partir de um computador remoto.

Para obter informações sobre como fazer a conexão com uma instância de usuário por meio do SQL Server Management Studio, consulte "SQL Server Management Studio e SQL Server Express" nos Manuais Online do SQL Server Express.

ObservaçãoObservação

Para obter mais informações sobre pipes nomeados ou protocolos de rede, consulte a Ajuda do Gerenciador de Configuração do SQL Server. Para acessar essa Ajuda, no menu Iniciar, clique em Executar e digite SQLServerManager.msc. Isto abrirá o Gerenciador de Configuração do SQL Server. Para acessar a Ajuda, clique no menu Ajuda. Para ver os protocolos de rede do SQL Server, clique em Configuração de Rede do SQL Server.

Administração de instâncias de usuário

Se você for um administrador e quiser administrar instâncias de usuário, as informações a seguir serão úteis.

Exibir/procedimentos armazenados/Transact-SQL

Descrição

Selecionar * em sys.dm_os_child_instances (Transact-SQL)

Permite-lhe executar uma exibição virtual que lista todas as instâncias de usuário geradas na instância pai.

SHUTDOWN

Interrompe o SQL Server. Use este comando para parar a instância de usuário. Para obter mais informações sobre como usar SHUTDOWN, consulte SHUTDOWN (Transact-SQL) nos Manuais Online do SQL Server.

sp_configure 'user instances enabled'

Controla a habilitação ou desabilitação do recurso de instância de usuário.

Para habilitar a geração de instâncias de usuário, use:

sp_configure 'user instances enabled','1' 

RECONFIGURE;

GO

Para desabilitar a geração de instâncias de usuário, use:

sp_configure 'user instances enabled','0'.

sp_configure ‘user instance timeout’

Use:

sp_configure 'show advanced options', 1;

RECONFIGURE;

GO

sp_configure 'user instance timeout', 5;

GO

Onde 5 é o valor mínimo e 65535 é o valor máximo.

É necessário o comando sp_configure ‘show advanced options’ para visualizar e definir o tempo limite. Para obter mais informações sobre como exibir opções avançadas, consulte Definindo opções de configuração de servidor nos Manuais Online do SQL Server.

O tempo limite pode ser definido tanto na instância pai, quanto na instância de usuário.

Quando uma instância de usuário é iniciada, ela sempre obtém o valor do tempo limite da instância pai. Contudo, uma vez iniciada, a instância de usuário pode usar sp_configure para alterar o valor do tempo limite válido somente para aquela instância específica.

Limitações do uso de instâncias de usuário

Quando são utilizadas instâncias de usuário, alguns dos recursos do SQL Server Express podem não funcionar conforme o esperado. A lista a seguir descreve as limitações que podem ocorrer:

  • Um usuário só conseguir ter uma instância de usuário.

  • A replicação poderá ser desabilitada.

  • A instância de usuário pode não dar suporte à Autenticação do SQL Server. Há suporte apenas para a Autenticação do Windows.

  • O suporte a protocolo de rede nas instâncias de usuário só podem ser pipes nomeados.

  • A instância de usuário poderá compartilhar as entradas de registro da instância pai.

  • Pode não haver suporte para instância de usuário com código nativo. Este recurso só tem suporte com ADO .NET.

  • Pode não haver suporte à pesquisa de texto completo em uma instância de usuário do SQL Server Express.

  • O provedor WMI para eventos de servidor pode não ter suporte nas instâncias de usuário geradas dinamicamente. Todavia, ele deve funcionar na instância pai do SQL Server Express. Para obter mais informações sobre o provedor WMI, consulte Provedor WMI para eventos de servidor nos Manuais Online do SQL Server.