Instâncias de usuário para não-administradores
A instância de usuário é um recurso que permite a não-administradores executar uma versão local do SQL Server em suas próprias contas. Com as instâncias de usuário, os não-administradores têm privilégios de proprietário de banco de dados sobre a instância executada em sua própria conta.
Importante |
---|
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 outras instâncias de usuário em execução no computador. O recurso de instância de usuário também é chamado de "Executar como Usuário Normal (RANU, Run As Normal User)".
Observação |
---|
Para fins 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 caracteres 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 ADO. NET connection.open.
Observaçã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\Nome do usuário\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 poderá usar o banco de dados mesmo que não seja um administrador na instância pai.
Observação sobre segurança Os logons concedidos como membros da função de servidor fixa sysadmin durante a instalação são provisionados como administradores no banco de dados de modelo. Eles são membros da função de servidor fixa sysadmin na instância de usuário a menos que removida.
Quando a instância de usuário é gerada, o SQLClient redireciona todas as chamadas para ela.
Observaçã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
}
Conectando a 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çã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:
RECONFIGURE; GO Para desabilitar a geração de instâncias de usuário, use:
|
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.