Client Accessing SQL Server Directly - sql-server

Q: Is it bad practice to have a client application communicate directly with SQL Server via port 1433? i.e. iOS device with application which has direct access to SQL Server via port 1433. I'm assuming yes and it should be via a web-service (SOAP,REST) , application server...

Related

How does .NET Core on Linux determine what port a SQL Server instance listens on?

I have an ASP.NET Core 1.1 Web API which runs in a Docker container on Ubuntu and connects out to a SQL Server database (SQL Server 2012 SP3) on a Windows server. This works in 3 out of 4 of out environments, but in one environment it cannot connect to the SQL Server and I am trying to troubleshoot it.
The error is:
Unhandled Exception: System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 25 - Connection string is not valid)
The SQL Server has an instance name: SQLSERVER1\APPS. From the Linux server I can ping the server SQLSERVER1 and telnet to SQLSERVER1 1372 (1372 is the port for the APPS instance: so network connectivity is there.
The only space I can see for the problem to occur is how .NET Core translates the instance name to a port number. Does anyone know how this is done and whether it is configurable on the client machine?
Remote named instance listening port discovery relies SQL Server Browser Service and protocol. As you cannot leverage this for your Linux docker image, I suggest you connect by explicitly specifying the port and omitting the instance name: "server=tcp:SQLSERVER1,1372;database=...;...":
The name or network address of the instance of SQL Server to which to connect. The port number can be specified after the server name: server=tcp:servername, portnumber
BTW if you live the instance name it should make no difference whatsoever after you explicitly specify the port.
PS. After reading again the question, the issue is related but different cause. Normally the Linux container can discover the Windows SQL Server, as the Browser service is probably up and running (proof that 3 envs. it works). In the 4th environment it means something blocks the discovery. Either the Browser service is stopped, or the browser discovery protocol listening port is blocked in the FW (UDP 1433), or perhaps the UDP packet (or the response!) is lost somewhere between the container and the server. You can investigate and find the root cause, but, you can also just ignore the problem and work around the issue by... specifying the port explicitly, just as I showed.

Connect to MS SQL Server 2014 from a computer on a different network

I have created an Application in VB.NET with database in MSSQL 2014.
I have configured TCP/IP=1433, UDP=1434, Windows Firewall is configured to allow 1433, 1434, sqlserver.exe, sqlbrowser.exe and server's login settings are configured. Application is working on my laptop which is on the same Internet connection as the host computer. I am trying to use the Application on client computer which is on another network and getting NAMED PIPES PROVIDER error40.
This is connection I am using:
Data Source=myServerName;InitialCatalog=dbName;UserId=clientcomputerName;Password=x
Do I need to configure client's computer in any way?
Does your DNS/HOSTS file resolve the remote computer name? Try IP address instead if not. Not sure but not all versions of SQL support remote connections via Named Pipes (can sometimes get round this by using registry hacks to add the connection as ODBC)

Accessing database ports that are required to be closed due to PCI Compliance on Windows Server 2008

I've got a client that is hosted on a dedicated Windows 2008 Server that we look after. They have recently failed a PCI Compliance check which is asking that we close the ports for SQL Server and MySQL (1433 and 3306).
If we do this we'll loose access to the database from all the hosted website on the server. Is there a way around this or can we connect to the databases whilst still closing the ports?
Thanks
Yes, you can change the port for SQL Server to use a non-default port setting. As long as the port for the SQL Server browser remains open, instances will still be able to retrieve the correct SQL port from the server instance. This is now named instances of SQL Server function while using a dynamic port.
http://support.microsoft.com/kb/823938

how to connect to SQL server that works on computer that uses proxy

My SQL server installed on remote computer, that works via proxy server. I know the external IP address, and local network IP of computer. How can I connect?
Follow instructions on MSDN:
Connecting to SQL Server Through a Proxy Server:
How to: Connect to SQL Server Through a Proxy Server (SQL Server Configuration Manager)
If the computer hosting SQL Server is behind a proxy server, and you have no alternate route to that host other than through that proxy server, you're going to have to determine the process necessary to configure the proxy to allow connections from your box to the SQL server...

To Remotely connect a SQL Database through Internet

I want to connect to a remote computer though internet to connect a SQL Server database. I tried using Teamviewer successfully. Is there any other free tool which can be used in lieu of Teamviewer ?
There are are a few options.
1) Setup up VNC (there are a lot of free VNC implementations). If you set it up, I would recommend setting it up using SSH or some form of encryption so you are secure.
2) Set up a remote vpn connection. If the remote router supports something like DDWRT you can install that and set up you can vpn in to the remote network and access the machine as if you were there locally.
3) Set up port forwarding on the remote router so that when you connect to a specific port (default for SQL server is 1433) it forwards your request to the remote machine and then you just connect to the external IP of the remote router.
4) Set up port forwarding for Windows remote desktop. Basically the same as #3 except a different port and you'd use RDP to connect to the machine first instead of SQL server.
You can use MySQL Workbench tool for this purpose .. it's really simple ...
Just configure a new connection with the tool and you get to access the database remotely...
Just connect directly using SQL Server authentication
Update: or use trusted connection through VPN (IPSec).
If this question involves connection to SQL Server through internet. If not, then it is not development question and does not belong to SO.

Resources