Partilhar via


Identificando uma fonte de dados usando um nome ad hoc

Quando a fonte de dados OLE DB não será referida com freqüência suficiente para garantir a configuração de um servidor vinculado, um nome ad hoc pode ser usado como uma referência da tabela. No SQL Server, é possível usar as funções OPENROWSET e OPENDATASOURCE para fornecer um nome ad hoc.

O controle de quem pode acessar uma fonte de dados específica está disponível apenas através de servidores vinculados. Como esse controle não está disponível para nomes ad hoc, por padrão, nomes ad hoc são desabilitados em todos os provedores OLE DB exceto no provedor OLE DB do SQL Server Native Client.

Observação importanteImportante

Para cada instância do SQL Server, os membros da função de servidor fixa sysadmin podem habilitar ou desabilitar o uso de nomes de conectores ad hoc para um provedor OLE DB usando a opção de provedor DisallowAdhocAccess e a opção de configuração de servidor Consultas Distribuídas Ad Hoc. Quando o acesso ad hoc está habilitado, qualquer usuário conectado naquela instância pode executar instruções SQL que contêm nomes de conectores ad hoc fazendo referência a qualquer fonte de dados na rede que possa ser acessada usando aquele provedor OLE DB. Para controlar o acesso a fontes de dados, os membros da função sysadmin podem desabilitar o acesso ad hoc ao provedor OLE DB, limitando os usuários às fontes de dados referenciadas pelos nomes de servidores vinculados definidos pelos administradores. Por padrão, o acesso ad hoc está habilitado para o provedor OLE DB do SQL Server Native Client e desabilitado para todos os outros provedores OLE DB.

OPENROWSET e OPENDATASOURCE fornecem informações sobre conexão ad hoc. É possível usar essas funções para especificar todas as informações necessárias para acessar a fonte de dados OLE DB. No entanto não é possível usar OPENROWSET e OPENDATASOURCE de maneira intercambiável:

  • É possível usar OPENROWSET sempre que o provedor OLE DB retornar conjuntos de linhas especificando um nome de tabela (ou exibição) ou especificando uma consulta que retorne um conjunto de linhas. OPENROWSET pode ser usado em vez de um nome de tabela ou de exibição em uma instrução Transact-SQL.

  • Use OPENDATASOURCE apenas quando o provedor expuser conjuntos de linhas e usar a notação catalog**.schema.object. OPENDATASOURCE pode ser usado nos mesmos locais na sintaxe Transact-SQL em que um nome de servidor vinculado pode ser usado. Portanto, na notação catalog.schema.**object, OPENDATASOURCE pode ser usado como a primeira parte de um nome de quatro partes que faça referência a uma tabela ou exibição.

OPENROWSET e OPENDATASOURCE devem ser usados apenas para acessar dados externos em situações ad hoc quando um servidor vinculado permanente não puder ser configurado. OPENROWSET e OPENDATASOURCE não fornecem toda a funcionalidade disponível em um servidor vinculado, como gerenciamento de mapeamentos de logon, a capacidade de consultar os metadados do servidor vinculado e a capacidade de configurar várias definições da conexão, como valores de tempo limite.

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

Ao conectar a uma outra fonte de dados, o SQL Server representa o logon apropriadamente para logons autenticados do Windows. No entanto o SQL Server não pode representar logons autenticados do SQL Server. Portanto, para logons autenticados do SQL Server, o SQL Server pode acessar outra fonte de dados, como arquivos e fontes de dados não relacionais, como o Active Directory, usando o contexto de segurança da conta do Windows sob a qual o serviço do SQL Server está sendo executado. Potencialmente, isso pode fornecer acesso a esses logons a uma outra fonte de dados para a qual eles não têm permissões, mas a conta em que o serviço SQL Server está sendo executada realmente tem permissões. Essa possibilidade deve ser considerada ao usar logons autenticados do SQL Server.

Os argumentos de OPENROWSET e OPENDATASOURCE não oferecem suporte a variáveis. Os argumentos devem ser especificados como literais de cadeia de caracteres. Se for necessário passar variáveis como argumentos, uma cadeia de caracteres de consulta contendo as variáveis pode ser construída dinamicamente e executada usando a instrução EXECUTE.