Alternatives to Microsoft SQL Server

Microsoft SQL Database licensing is expensive, however you do get the benefit of very good development tools and integration. They have three versions:

  • Web – no performance tools, SSIS or replication
  • Standard
  • Enterprise

Alternatives to Microsoft SQL Server are:

  • MySQL – Currently owned by Oracle and is slowly being moved away from Opensource. Its a quick database, however is misses alot of features of SQL Server and it very slow at stored procedures and views that your current system uses extensively. MySQL simplifies database development and this is why it is the most popular database system. There are a number of compatible databases including MariaDB and Percona Server.
  • Postgres – Fantasic open source database that has excellent performance and features. Originally based on the Ingres database system (which is the original base of SQL Server), it is under
  • constant development and they have recently added a number of features to compete against nosql databases like MongoDB.
  • Ingres – Sadly neglected by owners over the past 10-20 years
  • Other commercial databases – IBM DB2, Oracle, etc all very expensive

If i had to choose a database system for a new system, i would go for
Postgres, however there are a number of risks with Postgres when migrating an existing project:

  • Current system will need changing to work. Postgres driver and database might not have the same abilities and features as provided by Microsoft drivers.
  • Migrating to a different database will be difficult and possibly need training and support for current staff. You would need significant downtime to migrate the data from one system to the other
  • Less used in industry, so experienced staff are not easily available.
  • Development tools are not fully integrated into development tools like Visual Studio etc.
  • Less documentation/blogs/advise available due to lower usage.

Unfortunately there is no simple replacement and although you might save money on licensing fees, you may end up spending the savings elsewhere.

However if your starting a new project, i would use it.

Installing Ruby 1.9, Ruby 3 and Passenger on Debian Lenny or Squeeze

The following is how i got a Ruby on Rails app running on Debian Lenny.

First edit your apt sources list to add Squeeze backports to get a stable Rails

apt-get install ruby1.9.1-full gem1.9.1 install rails gem1.9.1 install rubygems-update gem1.9.1 install rake

These commands will install the ruby libaries in /var/lib/gems/1.9.1/.  You can now to deploy the Ruby on Rails app to the web server. You may need a few development pacakage for mysql, xml and xslt, so you may need to install the following.

apt-get install libxml2-dev  libxslt1-dev libmysqlclient-dev

Once this is complete change to the directory and run /var/lib/gems/1.9.1/bin/bundle install

This will install all the required Gems for the application.

Now we need to install passenger.

gem1.9.1 install passenger

If you use Apache, you will then need the passenger apache module.  This requires a number of development libraries, that might not be installed.  They can be installed using: apt-get install build-essential libssl-dev zlib1g-dev apache2-prefork-dev libapr1-dev libaprutil1-dev libcurl4-openssl-dev

Once that is complete run the following: /var/lib/gems/1.9.1/bin/passenger-install-apache2-module

vi /etc/apache2/mods-available/passenger.load a2enmod passenger /etc/init.d/apache restart

Netgear ReadyNAS Bacula backup

Bacula is a enterprise open source network backup system that can backup all your servers to a central place.

It works by running a Bacula File Service on each server that communicates to a central controller that manages the backup and restore requests to storage daemons. I use a Netgear ReadyNAS and these can run the Bacula Controller and Storage daemons therefore keeping your backup solution in one place.

Securing SSH

SSH is a great service, however it is open to dictionary attacks that can allow hackers to get access of the server.

One great tool for limiting the success of the dictionary attacks against your ssh services is DenyHosts. This monitoring the authentication logs of your server and if it detects 3 failed logins from an ip address, it adds that ip address to /etc/hosts.deny.

To improve the service further, it has an optional distributed service that will notify you of ip addresses that are actively attempting to login to ssh servers by synchronising with a central server. Therefore you can block an ip address before it even attempts to login to your server.

The only downside of DenyHosts, is useless developers/users of your servers have a tenancy to forget their passwords occasionally and they then get totally blocked from the server, but that can be easily fixed.

How to fix SQL Server orphaned users

When you restore a database, often the UserSID is different between the database and the server users, so you end up with Orphaned Users.

To resolve this run the following when connected to the restored database.

EXEC sp_change_users_login Report

That will return a list of all orphaned users in the selected database.

If you already have a login id and password for this user, fix the orphaned user by:

EXEC sp_change_users_login Auto_Fix, user

If you want to create a new login id and password for this user, fix it by :

EXEC sp_change_users_login Auto_Fix, user, login, password