diff --git a/README.md b/README.md
index a90c348581074680ac23e664c94bcd653651dab6..89bc830f2064a041e43e608b6fabcb811cc22434 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ The maximum number of requests which the server keeps track of. This should be 2
 Limit on the total number of servers running. Default: `4096`
 
 ##### `mysql_support`
-Install support for MySQL. Default: `false`
+Install support for MySQL. Note this only installs the package. Use `freeradius::sql` to configure SQL support. Default: `false`
 
 ##### `perl_support`
 Install support for Perl. Default: `false`
@@ -238,6 +238,43 @@ freeradius::site { 'inner-tunnel':
 }
 ```
 
+#### `freeradius::sql`
+
+Configure SQL connections. You can define multiple database connections by
+invoking this resource multiple times. If you are using MySQL, don't forget to
+also set `mysql_support => true` in the base `freeradius` class.
+
+##### `database`
+
+Default: `undef`. Required. Specify which FreeRADIUS database driver to use. Choose one of `mysql`, `mssql`, `oracle`, `postgresql`
+
+##### `server`
+
+Default: `localhost`. Specify hostname of IP address of the database server.
+
+##### `login`
+
+Default: `radius`. Username to connect to the databae.
+
+##### `password`
+
+Default: `undef`. Required. Password to connect to the database.
+
+##### `radius_db`
+
+Default: `radius`. Name of the database. Normally you should leave this alone. If you are using Oracle then use this instead:
+`(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=your_sid)))`.
+
+```puppet
+freeradius::sql { 'mydatabase':
+  database  => 'mysql',
+  server    => '192.168.0.1',
+  login     => 'radius',
+  password  => 'topsecret',
+  radius_db => 'radius',
+}
+```
+
 #### `freeradius::statusclient`
 
 Define RADIUS clients, specifically to connect to the status server for monitoring.
diff --git a/manifests/sql.pp b/manifests/sql.pp
new file mode 100644
index 0000000000000000000000000000000000000000..e1c9c9327e7b66240f9adc2e1875b180d1d74208
--- /dev/null
+++ b/manifests/sql.pp
@@ -0,0 +1,29 @@
+# Configure SQL support for FreeRADIUS
+define freeradius::sql (
+  $database,
+  $password,
+  $server = 'localhost',
+  $login = 'radius',
+  $radius_db = 'radius',
+) {
+  $fr_package  = $::freeradius::params::fr_package
+  $fr_service  = $::freeradius::params::fr_service
+  $fr_basepath = $::freeradius::params::fr_basepath
+  $fr_group    = $::freeradius::params::fr_group
+
+  # Validate our inputs
+  if ($database != 'mysql' and $database != 'mssql' and $database != 'oracle' and $database != 'postgresql') {
+    error('$database must be one of mysql, mssql, oracle, postgresql')
+  }
+
+  # Generate a module config, based on sql.conf 
+  file { "${fr_basepath}/modules/${name}":
+    mode    => '0640',
+    owner   => 'root',
+    group   => $fr_group,
+    content => template('freeradius/sql.conf.erb'),
+    require => [Package[$fr_package], Group[$fr_group]],
+    notify  => Service[$fr_service],
+  }
+
+}