Blog

Developing with MS SQL on your Mac

Placeholder Avatar
Sebastian Porto
August 26, 2014

I recently had to set up a MS SQL database on my Mac for a client project, if you ever have to do this here is a mini tutorial.

In this post I am using VMWare Fusion for virtualisation, but you could use something else and the instructions should be mostly portable.

Get a Windows VM

Go to https://www.modern.ie/en-us/virtualization-tools and download a VM (Virtual Machine) for your Mac. I will be using Windows 7 (the version of IE doesn’t matter).

Install the Virtual Machine and Log in. voila_capture 2014-07-18_09-20-15_am

Get MS SQL Express with Tools

As you download the Windows VM you can also download the free version or MS SQL. At the time of writing the tiny_tds gem - the gem needed to access MS SQL - only supports MS SQL up to version 2012. So version 2014 won’t work. Go to http://www.microsoft.com/en-au/download/details.aspx?id=29062 and download MS SQL Express 2012, make sure to get the version with tools (named something like ENU\x86\SQLEXPRWT_x86_ENU.exe). voila_capture 2014-07-18_09-21-07_am

Install MS SQL Express

If you downloaded MS SQL Express on your Mac, you will need to make it accessible to your Windows VM. If you are using Fusion you can simply drag and drop the installer to Windows. Run the installer and just install the default components. Accept the defaults in all other screens. voila_capture 2014-07-18_09-32-38_am

Create a DB for Testing

In Windows, open SQL Server Management Studio. Connect using the provided defaults, then: - Right click on Databases - Click on New Database - Add a name e.g. Test - Click OK voila_capture 2014-07-18_10-18-07_am

Enable SQL Authentication

Still in SQL Server Management Studio: - Right click on the root of the tree e.g. IE11WIN7\SQEXPRESS - Select Properties - Select Security - Enable SQL Server and Windows Authentication mode - Click OK voila_capture 2014-07-18_10-06-36_am

Create a Database User

In Management Studio: - Click on Security on the tree - Right click on Logins - Select New Login - Add a use e.g. dbuser - Select SQL Server authentication - Add a password voila_capture 2014-07-18_10-Matenia Rossides-22_am

Set User Mappings

In the same screen: - Click on User Mapping - Check the previously created DB e.g. Test - Click the button on the right - In the pop up window, select Browse - Check dbo and OK - Select OK again - Select db_owner on the bottom - Finally click OK

voila_capture 2014-07-18_10-47-26_am You can then close Management Studio.

Enable TCP in Express

In Windows, open SQL Server Configuration Manager. Then: - Click on SQL Server Network Configuration - Click on Protocols for SQLEXPRESS - Double click on TCP/IP on the right. - Change Enabled to Yes voila_capture 2014-07-18_09-52-42_am - Click on IP Addresses - Scroll down all the way to IPAll - Set the TCP Port e.g. 1433 voila_capture 2014-07-18_11-24-37_am - Click OK

Restart SQL (in the same window):

  • Click on SQL Server Services
  • Right click on SQL Server on the right and select Restart We can now close SQL Server Configuration Manager.

Disable the Windows Firewall

In Windows: - Go to the Control Panel - Search for firewall and open the Windows Firewall settings - Click on Turn Windows Firewall on or off on the left - On the Home network settings, click on Turn off Windows Firewall - Click OK and close the control panel voila_capture 2014-07-18_10-57-08_am

Find the IP Address for the VM

In Windows: - Click on the network icon on the bottom bar - Click on Open Network and Sharing Center - Click on the link on Connections e.g. Local Area Connection - Click on Details - Take note of the IPv4 Address e.g. 192.168.0.11 in my case, this is the IP our VM is running on voila_capture 2014-07-18_10-59-46_am

Set Network Location to Home

In Windows: - Open the Network and Sharing Center as in the previous step - Click on the link under Network if it says ‘Public network’ - Click on Home network in the pop up window - Click Next several times and then Finish The Network should be set to ‘Home network’ voila_capture 2014-07-18_10-59-58_am voila_capture 2014-07-18_11-07-45_am

Test the Connection from the Mac Terminal

In the mac terminal test the connection to the Windows VM: ping 192.168.0.11 Note that the IP address will most likely be different on your machine. This should give you a successful ping. If you get a timeout double check the network settings and firewall in Windows.

Test the connection to MS SQL

If you have an application that can connect to MS SQL on the Mac, I recommend testing the connection from there first before going to Rails. I am using Navicat in my case. Otherwise just skip this step.

In Navicat: - Create a new connection for MS SQL - Set the IP Address to your VM IP e.g. 192.168.0.11 - Set the port as set previously e.g. 1433 - Set Initial Database to the DB created previously e.g. Test - Set User Name and Password as created previously - Test the connection voila_capture 2014-07-18_11-33-01_am

Install Freetds

In order to connect to MS SQL, we need to install the necessary libraries in our Mac. Install freetds using homebrew, in the Mac terminal: brew update brew install freetds ## Add the tiny_tds gem to Your Project In your Gemfile: gem 'tiny_tds', '~> 0.6' Then: bundle ## Set up the Connection in Rails

In your database.yml, add / modify an entry for using the MS SQL db: mssql: adapter: sqlserver host: 192.168.0.11 port: 1433 database: Test username: dbuser password: 123456 pool: 5 timeout: 5000

Take care to set the values as set previously i.e. host, port, username and password. When this is done, your Rails application should now be able to connect to the MS SQL Express server running on the VM.