AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 208181
Accepted
Kenneth Fisher
Kenneth Fisher
Asked: 2018-05-30 12:49:38 +0800 CST2018-05-30 12:49:38 +0800 CST 2018-05-30 12:49:38 +0800 CST

BULK INSERT recebendo "Não é possível carregar em massa porque ... Acesso negado" em um arquivo ao qual tenho acesso

  • 772

Estou tentando executar um BULK INSERT, mas estou recebendo um erro de acesso negado. Até agora tentei o seguinte:

  • Eu posso abrir o arquivo da minha máquina
  • Estou logado no SQL Server (tentei v2008 R2 e v2016) usando a autenticação do Windows
  • Eu tenho permissões de administrador do sistema
  • Eu posso typeo arquivo usando xp_cmdshell (usa a conta de serviço SQL, mas elimina a ideia de que é um firewall)
  • O caminho é um URL de rede e não uma unidade local

O comando que estou usando é esse:

BULK INSERT ken_temp
FROM '\\network_path\temp\kdf\text_file.txt'
WITH
   (
    FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'
   ,ROWS_PER_BATCH = 50000
   ,MAXERRORS = 10
   )

Alguma ideia?

sql-server sql-server-2008-r2
  • 1 1 respostas
  • 17039 Views

1 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2018-05-30T18:17:55+08:002018-05-30T18:17:55+08:00

    O problema é que:

    1. Você está fazendo login usando a Autenticação do Windows: isso significa que o SQL Server tentará representar sua conta do Windows/Domínio para o acesso ao sistema de arquivos.

    2. Você fez logon diretamente em uma estação de trabalho e, em seguida, conectou-se remotamente ao SQL Server: isso significa que você se conectou ao servidor que executa o SQL Server indiretamente, passando seu token de autenticação de sua estação de trabalho para o servidor que executa o SQL Server.

    3. Você não habilitou a delegação para o SQL Server: isso significa que você está preso ao comportamento padrão de não ter permissão para passar esse token além de 1 etapa do logon direto.

    4. Você está tentando ler um arquivo que existe em um recurso remoto: isso significa que está mais de 1 passo além de onde você fez login diretamente.

    É por isso que você pode acessar o arquivo da sua estação de trabalho muito bem. E é por isso que usar xp_cmdshelltambém funciona, pois a conta de serviço está conectada diretamente ao servidor que executa o SQL Server, e o recurso remoto está apenas um passo além.

    Suspeito que, se você acessasse a área de trabalho remota diretamente no servidor que executa o SQL Server, executasse o SSMS nesse servidor e, em seguida, executasse o BULK INSERT, ele seria bem-sucedido. Ou também deve funcionar se você configurar um logon do SQL Server, conceder ao logon a permissão "admin em massa" e, em seguida EXECUTE AS Login = 'JustReadTheDangFileAlready';, fazer o BULK INSERT. Ao executar BULK INSERT/ OPENROWSET (BULK...)como um logon do SQL Server, não há conta do Windows para representar, portanto, o acesso ao sistema de arquivos é feito usando a conta de serviço, que será como xp_cmdshell.

    Você tem as seguintes opções:

    1. Habilitar Delegação para SQL Server (não lembro se é para o serviço ou a conta, nesse caso pode ser sua conta do Windows que precisa, mas existem guias sobre como configurar isso, que inclui configurar os SPNs) . Acredito que esta seja a escolha preferida/recomendada. Isso permite que o processo encaminhe os tokens de autenticação para recursos removidos do login direto.

    2. Use um logon do SQL Server para esse processo. Não acredito que estou sugerindo isso, mas se você tivesse um logon do SQL Server que estivesse na função de servidor fixa "administrador em massa" OU tivesse a permissão "administrador em massa" correta, você poderia criar o usuário associado para isso Faça login (em um banco de dados apropriado) e coloque o BULK INSERTem um procedimento armazenado que foi criado usando WITH EXECUTE AS 'JustReadTheDangFileAlready'. Então você pode executar esse proc que deve mascarar que a solicitação estava vindo de uma conta do Windows.

    3. Abra as permissões desse arquivo remoto (e talvez também a pasta?). Você pode dar permissão "ler" para "Todos" (e talvez também "ler" ou alguma outra permissão na pasta).

    4. Exclua essa pergunta e use esse "erro" como justificativa para precisar de uma SAN cara que será conectada via cartão HBA e aparecerá como uma unidade local ?. Apenas diga ao CFO: "É realmente o único jeito. A internet disse isso."

    • 6

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve