Importação em massa do SQL Server do fileshare. Como posso obter o SQL Server para ver o compartilhamento?

2

Eu tenho dois servidores A e B. B é um servidor de banco de dados, A é (aqui) um cliente para o servidor de banco de dados. Uma ferramenta em execução no servidor A conecta-se ao SQL Server no servidor B e, em última análise, dispara uma importação em massa de um compartilhamento no servidor A (\\ servera \ fileshare).

A ferramenta no servidor A é executada como sistema local. domain \ servera $ tem o acesso necessário ao SQL Server no servidor B.

O problema é que o SQL Server no servidor B não pode acessar \\ servera \ fileshare apesar da conta do serviço SQL ter todas as permissões para fazer isso (no servidor A). Descobri que isso ocorre porque o SQL Server tenta delegar a conexão à conta que o utilitário usa para se conectar ao SQL Server e isso falha porque a conta de serviço do SQL Server não tem o direito de delegar (e essa configuração não pode ser alterada por eu).

Também descobri que, se eu me conectar usando uma conta do SQL (ou seja, não uma conta do Active Directory) usando a autenticação do SQL (e não a autenticação do Windows), o SQL Server se conecta ao compartilhamento de arquivos usando a conta de serviço do SQL Server e tudo funciona. A ferramenta, felizmente, suporta o uso de uma conta SQL. Infelizmente, a senha é fornecida em texto simples como um parâmetro de linha de comando e aparece na lista de processos entre todos os outros parâmetros. Isso não é bom.

Existe uma maneira de fazer o SQL Server usar sua própria conta de serviço ao se conectar ao compartilhamento de arquivos sem usar uma conta do SQL para se conectar ao SQL Server?

Este é o SQL Server 2008 no Windows Server 2003.

    
por Andrew J. Brehm 12.03.2012 / 20:30

3 respostas

2

Infelizmente, o comportamento que você testemunhou é por design:

link [Delegação de conta de segurança (representação)] link [Considerações de segurança] link

Do segundo link:

The way in which SQL Server 2005 and later versions control access to files addresses a security issue that was present in Microsoft SQL Server 2000 and earlier versions. Formerly, after a user was authenticated, access to external files was based on the security profile of the SQL Server process. When the SQL Server process had read access to a file, for a user that did not have access to the file but was a member of the bulkadmin fixed server role, the user could import the file by using BULK INSERT and access the contents of the file.

Suas únicas opções são usar um logon do SQL Server ou fornecer ao SQL Server os direitos necessários para executar a delegação.

Uma possível solução poderia ser executar um trabalho para copiar o arquivo de ServerA para ServerB (suponho que sua conta de serviço tenha acesso de gravação a ambos) e, em seguida, fazer com que o SQL Server no ServerB faça a importação de seu disco local.

    
por 12.03.2012 / 21:22
1

Você pode mapear seus logins do Windows para uma credencial que tenha acesso:

create credential [...]  with identity='domain\user', secret='domainpassword';
alter login [...] with credential=[...];

Tenha cuidado, para que você não acabe duplicando o AD no armazenamento de credenciais SQL. E você precisa criar uma maneira de manter o banco de dados de credenciais do SQL Server em sincronia com o AD (alterações de senha, etc.).

    
por 12.03.2012 / 22:57
0

Execute-o como um trabalho do agente do sql server

    
por 12.03.2012 / 20:40