Why Does Bulk Insert Task Not Work From Remote Servers With Windows Authentication?
Jun 10, 2007
Using Bulk Insert Task extensively in our solution. Everything was working great till we deployed it in stage columns. The database server is different from application servers. We have ASP.NET web services driving SSIS packages on application server. After struggling thru several security issues to get this working (ended up creating an application pool with a domain account) we are now stuck with this problem. On a different note still don't understand what specific security permission is available to domain account that makes it work.
Read in some blog that SQL Server 2005 SP2 Beta had this (Bulk Insert) fixed but not in final production version. Is there a specific reason why this is so?
SSIS and the API is quite easy to work with but associated security and deployment issues are not always clear. A lot of answers seem to be coming from end users - thanks a lot to all for sharing your experiences - sadly not presented clearly in SSIS documentation.
I have seen similar questions, but none of the answers have solved my problem.
I have several SQL2000 servers running under Win2003. In the past, we have been using SQL logins, but I have been trying to transition to using Windows Authentication. It has been working great except that sometimes queries using linked servers fail.
The linked servers are set up for the connection to use the login's current security context.
For testing this problem, I have limited myself to two servers to do this between. My Windows account is defined with sa rights on both servers. I have tried explicitly to impersonate my account, I have told it to explicitly use the same account and password on the other server. I have tried not listing my account and letting it default my original setting of using current security context. (if I tell it to use the sa account remotely, that does work)
Both SQL Servers run under the same domain account. That account had delegation rights. My account is not marked as sensitive. The computer account has delegation rights. There is a Service Principle Name defined for both servers.
I have tried everything I can find to try, yet I still get the following message (or something similar, depending on which settings I have changed around).
Msg 18452, Level 14, State 1, Line 1 Login failed for user '(null)'. Reason: Not associated with a trusted SQL Server connection.
I'm just learning SSIS and I've hit my first bump. I am doing a bulk import from a tab delimited text file to an empty sql table that has a Idendity column defined. How do I tell the bulk insert task to skip that column when inserting from the text file. If I remove the identity column it imports the data fine, but I want to create the indentity column in the table too.
I receive the following error message when I try to use the Bulk Insert Task to load BCP data into a table:
Error: 0xC002F304 at Bulk Insert Task, Bulk Insert Task: An error occurred with the following error message: "Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.The bulk load failed. The column is too long in the data file for row 1, column 4. Verify that the field terminator and row terminator are specified correctly.Bulk load data conversion error (overflow) for row 1, column 1 (rowno).".
Task failed: Bulk Insert Task
In SSMS I am able to issue the following command and the data loads into a TableName table with no error messages: BULK INSERT TableName FROM 'C:DataDbTableName.bcp' WITH (DATAFILETYPE='widenative');
What configuration is required for the Bulk Insert Task in SSIS to make the data load? BTW - the TableName.bcp file is bulk copy file as bcp widenative data type. The properties of the Bulk Insert Task are the following: DataFileType: DTSBulkInsert_DataFileType_WideNative RowTerminator: {CR}{LF}
Any help getting the bcp file to load would be appreciated. Let me know if you require any other information, thanks for all your help. Paul
I am using SQLXML 3 on a Windows 2003 server Running IIS 6.0. I used SQLXML configure IIS Support to create a virtual directry on this server to connect to MS SQL Server 2000 instance running on another windows 2003 server.
Configurations for the virtual directory are
1. Used Windows integrated authentication.
2. Created template for executing the stored procedure.
When i try to access the DB Server through a browser i am prompted to provide for Windows authentication. Even if i provide the domain user that has administrtive rights on both the server i am getting a response.
If from MMC i change the properties of the virtual directry to enable anonymous acess using the cridentials that i mentioned earlier, everything is working fine. I have been searching the net for 2 days and tried everything that i could find but still i keep getting the same error.
After 2 days of reading everything on the net about setting up Remote Access of my SQL 2012 Express using Windows Authentication I'm still not able to connect from a remote client onto my SQL Server Database Engine. I can get connected if using SQL Server Authentication. I have set all the parameters to allow access (read and tried everything from this site: URL.... but when I try using SSMS from the remote client to login I get Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. (Microsoft SQL Server, Error: 18452).I've disable the firewall (Even though I have put in rules to allow port 1433 and UDP port 1434). Nothing is allowing me to connect. I've have tried every solution listed and got nowhere. My network is very simple with only three computers connected via a Linksys router (Two running Windows 7 the test client is running Windows 8.1). I can shared files and folders between all. Each computer only has one user defined (default admin user).
I need to make this work as I have to document it for other end users who will be using an application I created that requires an SQL Database and it needs to be accessible by other users on their network.
SQL Database in my application with windows authentication rejects accessing after deploying and remote access 1- My web applications databese access is windows authentication 2- In developing area there is no problem for accessing database 3- After deploying to another server there is problem accessing database: Cannot open user default database. Login failed.Login failed for user 'BRCK231ASPNET'. How can I solve this problem? Thanks.
BCP and Bulk Insert to Linked ServersHi guys!Heres my set up:1) Im using Win2003 with MS SQL 20002) I have a linked server in SQL Server pointing to an MS Access DB.Why MS Access? Gee, I dont know. The guy who owns it refused to update hisVB app and point it to SQL Server.Anyway, I have 190,000 records in SQL Server that I wanted to dump andinsert it to MS Access.I tried to use OPENQUERY but OLE DB provider choked and wont be able tohandle that much records. Sucks!Moreover, DTS packages wont do the job. I tried it and it have the sameproblem.Now, I got one last option to go to. I EXPORTED SQL Server data to a textfile using BCP but my problem is how to IMPORT those data from the TEXTfile to my Linked Server that points to an MS Access.This is what Im trying to do:SQL Server Data ---> Text file ---> Linked Server (MS Access)bcp LinkedServerName..MSAccess_TableName in Shares1_tmp.txt -c -T -t ',' -r''SQLState = 08001, NativeError = 17Error = [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does notexist or access denied.SQLState = 01000, NativeError = 53Warning = [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen(Connect()).Thank you and you guys have a nice day.--Message posted via http://www.sqlmonster.com
I am running the following: BULK INSERT DB.dbo.[stblCLIENT] FROM 'SERVER1downloadClient.txt' WITH ( FIELDTERMINATOR = 'Ø', ROWTERMINATOR = '' ) DB.dbo.[stblCLIENT] is on SERVER2. I receive the following error: "Could not bulk insert because file 'SERVER1downloadClient.txt' could not be opened. Operating system error code 53(The network path was not found.)."
I am able to run a DTS package that imports the same text file from SERVER1 with no error.
Is BULK INSERT limited to importing text files from the server on which SQL Server is running or should I be able to BULK INSERT from another server on my LAN?
I want to be able to run the following command from SSMS (as an ad-hoc query).
BULK INSERT Database_Name.dbo.Table_Name FROM 'serverfile.txt' WITH (FIELDTERMINATOR = '|', ROWTERMINATOR = '0x0a', MAXERRORS = 0);
When I do I get:
Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "serverfile.txt" could not be opened. Operating system error code 5(Access is denied.).
I have full access to the file.I can do the same command successfully if the file is stored on a local drive on the server.
According to my DBA I can not run it with a remote file location because I don't have the SA permission. His solution is for me to create a job that runs the command. I have done so and the job works correctly.
Is he correct that there is no way for me to be able to run it from SSMS without SA permissions?
SQL Server 2012 running under a domain Managed Service Account. (Server A) File located on a Windows 2012 server in a directory which has been shared to user A. (Server B). User A is a domain account and is using his laptop, (laptop C) which is using SSMS to run a bulk insert command.
User A (Bulk Insert from laptop SSMS Client) --- > SQL Server (server A) --- > File Server (Server B)
The command fails and is returning Access denied to the file/folder share on Server B.
Running the same command on the SQL Server (Server A), the command works fine, so this is a double hop kerberos issue.
If I use a SQL Login from Laptop C, then the command works fine as the SQL Server will use the SQL's Managed service account to connect to the file share, which is set up for delegation and impersonation.
I am struggling to work out why a domain user cannot bulk insert a file from a remote location. I have checked that the user is connected with Kerberos authentication and they are. All articles seem to talk about setting up SPN's for the SQL Server so that SQL Login authentication can work over remote bulk insert, and just say to set up the file share properties properly if using a domain account.
What I am missing to allow domain accounts to bulk insert remotely, from a remote file share?
OK, Ive read many posts on this problem but have seen no resolution.
Here's the deal. When on the actual SQL box (There's 2 in the cluster) the bulk insert works fine. No errors and the event log on the machine that is hosting the text file shows that the account that SQL runs on has accessed the file. This account is a DOmain account and is in the Local Administrator of the SQL server and the remot box hosting the text file.
Thats great if you want your developers testing and accessing your SQL box as Administrators. We don't work that way. Our developers connect via SQL Management Studio and test ther stuff that way. That's where the problem rears it's ugly head.
When anyone runs a Bulk Insert command that accesses a text file that is on a remote server, they get an "Access Denied". Now, I did a lot of testing and found that when the users executes the Bulk Insert command from the SQL Management studio on their desk top, they connect to the SQL box with their credentials (OK, that's correct right?), SQL then runs the Bulk Isert command which then reaches out to the remote file server but gets the "Access Denied". I check the logs and it shows that "Anonymous" was trying to accesss the file.
Why is Anonymouss coming over as credentials for SQL on a Bulk Insert? I'm no idiot but this sounds like a big crappy bug tha M$ will not fess to. I followed many suggestions, made sure NTFS and Share level permissions were correct (That was the first thing...), made sure the account that was running as SQL Server within the cluster on both nodes in the cluster was the same, that wasn't it, I even created a SPN for SQL to run and automatically register in AD with the credentials that SQL runs as. NOTHING!!!
Has anyone gotten their bulk insert to work when inserting from a file that is NOT local to the SQL box? Any help is appreciated, but putting the text files on the local SQL box IS NOT AN OPTION.
I am using the Bulk Insert task object in DTS and I am using a format file as well to import data from a text file. I was able to insert data into my SQL table fine when I did not have a identity column defined in my table; however, I added a identity field and now the bulk insert will not work. Anyone had a similiar problem?
The error msg box that pops up says:
The statement has been terminated. string or binary data would be truncated.
Hi all,We have an application through which we are bulk inserting rows into aview. The definition of the view is such that it selects columns froma table on a remote server. I have added the servers usingsp_addlinkedserver on both database servers.When I call the Commit API of oledb I get the following error:Error state: 1, Severity: 19, Server: TST-PROC22, Line#: 1, msg:SqlDumpExceptionHandler: Process 66 generated fatal exception c0000005EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.I would like to know if we can bulk insert rows into a view thataccesses a table on the remote server using the "bulk insert" or bcpcommand. I tried a small test through SQL Query Analyser to use "bulkinsert" on a such a view.The test that I performed was the following:On database server 1 :create table iqbal (var1 int, var2 int)On database server 2 (remote server):create view iqbal as select var1,var2 from[DBServer1].[SomeDB].[dbo].[iqbal]set xact_abort onbulk insert iqbal from '\MachineIqbaliqbaldata.txt'The bulk insert operation failed with the following error message:[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionCheckForData(CheckforData()).Server: Msg 11, Level 16, State 1, Line 0General network error. Check your network documentation.Connection BrokenThe file iqbaldata.txt contents were :112233If the table that the view references is on the same server then weare able to bulk insert successfully.Is there a way by which I should be able to bulk insert rows into aview that selects from a table on a remote server. If not then couldanyone suggest a workaround. I would actually like to know someworkaround to get the code working using OLEDB. Due to unavoidablereasons I cannot output the records to the file and then use bcp tobulk insert the records in the remote table. I need to have some wayof doing it using OLEDB.Thanks in advanceIqbal
I want to check sorted data option for bulk insert task on DTS Package. I want to sort data on 1st column. How can I put order by clause on sorted data option? I put ORDER (SSNo) but I am getting error. Thanks ss
I am doing heavy Bulk insert task to one Database.When i checked the Activity Monitor I saw it was suspended and Wait type:PAGEIOLATCH_EX So it stopped itself.Do any experts have good idea about what is going on?
For ex: In SQL Server 2005 when we create table with 3 columns which has allow nulls option is disabled. Then we try to insert record with blank to any one of the column SQL server throws error, coz column name is NOT Null without inserting data it won't saves the record. When we try to import a csv data file has 3 columns & has null data. If we use BULK INSERT TASK option, it easily inserts the data, without throwing error.
My question is how can we restrict null data without inserting it into the table using BULK INSERT TASK using SQL Server 2005.
I am using the Bulk Insert Task to bulk copy data from a flat file to a SQL Server 2005 table. The flat file contains pipe ( | ) delimited columns and several thousand records which are {CR}{LF} delimited. The file also contains a header record and trailer record, which contain several words but also contains a ( | ) symbol among those words.
E.g.:
HEDR | yadi yadi yada500 | Data Data | More Data | 600460 | Datum | More More | 705550 | Data | Data | 603FOOTR | yadi yadi yada
I need to ignore the header and trailer records and just pickup the proper records. But even though I manually set the First Row property to 2 and the Last Row property to 4, It does not pickup the first true record i.e. the record which begins with 500, and if I set the First Row to 1, it throws me an error citing 'truncation error' or similar. I think it is taking the first record (i.e. header row along with the first row as one, and since there are now more pipes ( | ) the error is thrown)
I've tried setting different values for these properties but to no avail... Any help will be deeply appreciated...
Really Don't understand this and have run out of hair to pull out.
DTS package whihc has a Bulk Insert Task. The task is populated with its source filename dynamically. It has a format file which is stored locally to the box its running on.
The output file is from a unix box pipe delimited. Great dandy. All works a treat as long as I treat everything as either an INT or CHAR. But I have a couple of columns that are DATES in the format 13/02/2004.
I want these inserted into smalldatetime columns. Will settle for datetime columns though.
I get an error on every row Bulk Insert data conversion error (type mismatch) for Row X Column 11 (PostingDate) which happens to be the first date column.
Tried loading it as CHAR, SQLDATETIME and SQLDATETIM4 in the format file all to no avail. TRied it with columns in the dest table as DATETIME and SMALLDATETIME
I use a "Bulk Insert Task" inside of a "ForEach Container" and set the ConnectionString-Property of the "FlatFile-ConnectionManager" with an expression, pulling from a variable. The packages works fine, but I get an Error-Message in the Output-Window:
Fehler: 0xC001401E bei Package, Verbindungs-Manager 'FlatFile': Der in der Verbindung angegebene Dateiname 'c:old.txt' war ungültig.
Translation:
Error: 0xC001401E at Package, Connection-Manager 'FlatFile': Cannot open the file 'c:old.txt'. (Sorry, in this office is the no english version available).
'C:old.txt' is the initial value of the variable. The new value is 'C:ew.txt' and I can see the new value in the Debugger or in a Scripttask.
Before the execution of the "Bulk Insert Task" starts, SSIS makes a validation. I have tried to stop the validation on setting the property "DelayValidation" = True (Package,ForEach-Container,BulkInsert-Task,FlatFile-ConnectionManager), but it is not possible to stop the validation and the error-message. After printing the error-message, the variable is evaluated and the package works fine. After the first loop, there is no more error-message.
The error-message is a problem, because the operators look at the error-output.
As a workaround I can set the property in a Scriptatsk. Is there another solution????
I would like to get the rowcount from a bulk insert task to validate that all the data is being inserted correctly. So far the only way that I can see this being done is through a trigger on the target tables. I would like to have this information inside the DTS package. Can anyone help me?
I have a confusion with Bulk Insert task for several days. Here is what Books Online say, which i totally understand--- "The source file that the Bulk Insert task loads can be on the same server as the SQL Server database into which data is inserted, or on a remote server. If the file is on a remote server, you must specify the file name using the Universal Naming Convention (UNC) name in the path."
Now, If my Bulk Insert task (within a package) is on one server, say ETL ( so when i run the package, it will run from ETL server); but, My destination table where data will be inserted, is in another server, say PROD. So, My OLEDB connection will be pointing to a remote server .Now, If my text file is on ETL server, do i have to give UNC path?..Or If i have text file on the same server as my destination ( here PROD) do i Have to Give UNC naming?. I found in several places that Bulk insert Task runs on that server where its connections points to. My scnerio: I have multiple SSIS packages. Now These packages will be on ETL server, but all the databases will be hosted on PROD server. Now for my Bulk Insert , I asked them to keep all flat file on ETL server(where packages will be ). Looks like this will give me a problem later, since all my Destination will be on PROD server, during bulk insert , sql server will go and look for those files on PROD server rather than ETL server? Or i AM confused here?...... Say package.dtsx is On SER1which useses bulk insert tasks.. My OLEDB connection is SERV2 database B and Table T Now my flat file connection is D:myfilefile.txt
Now when i run this task where does these txt file will be pulled from. Does it pulls from local server (SER1) or does it goes to SERV2 looking for txt file.
I tried several combinations of moving files to different servers, yet i have no conclusions.
with my ssis-package i have to read several flatfiles. this files are stored in different folders on a unix machine. in my loop-task i have first a script, that checks whether the file exists. it does, so i set the path to a variable. in the connection-manager for the flat-file i have set source for the file to that variable. the bulk-insert-task starts, read the file and everithing is cool. but, sometimes, the package fails with this message:
[Bulk Insert Task] Error: An error occurred with the following error message: "Cannot bulk load because the file "\Owpu0kas 0 0 5 eceivedw000005.090" could not be opened. Operating system error code 53(error not found)."
i stop the degugging-mode, restart debuging and what happens? it runs ... maybe for the next one, two or three files and the error comes again, but never on the same file. i'm going crazy, what can i do?
The way I understand a Data Flow Task is that it inserts the rows from the source to destination one by one. Is there a way to make it act like a bulk insert task? We have been experiencing performance issues when inserting a lot of rows from one table to another. If there's no way to actually do it, can a bulk insert task functionality be scripted? Coz what I need is a table to table insert, and the bulk insert task only accepts data files as sources.