SQL Server 2012 - Contained Databases

Ein weiteres neues Feature des SQl Server 2012 sind die "Contained Databases". Bisher war es so das eine SQL Server Lögin angelegt werden musste, um einen Benutzer Zugriff auf den SQL Server zu gewähren. Diesem User wurden dann die Datenbanken zugewiesen, auf die er Zugriff haben sollte. Somit waren zwei getrennte Logins notwendig, einmal das Login auf den SQL-Server und zum zweiten das Login auf die Datenbank. Das Problem dabei war das eine Sicherung einer Datenbank, auf einem anderen SQL-Server unter Umständen dazu führen konnte, das zwar das Login auf die Datenbank mit der Sicherung wieder hergestellt wurden ist, jedoch das SQL-Server Login fehlte. Man spricht dabei von "verwaisten Benutzern". Mit den "Contained Databases" wird jetzt das Verschieben von Datenbank mitsamt der abhängigen Objekte wesentlich vereinfacht. Dies ist insbesondere Vorteilhaft bei der Höchverfügbarkeit, wie auch bei Entwicklungs- und Testumgebungen sowie natürlich auch für Azure (Hosting Umgebungen). Neben den entsprechenden Logins werden auch temporäre Objekte direkt in der "Contained Database" gespeichert, desweiteren auch Funktionen, Tabellen, Schemata und Typen. Einstellungen sowie Verbindungsserver, SQL-Agent-Jobs und andere Anwendungsbereich Objekte. Damit ist ein migrieren von Datenbanken auf einen anderen SQL-Server problemlos möglich. Jedoch sollte auch nicht vergessen werden, das dies auch einige Nachteile mit sich bringt. Diese Nachteile beziehen Sich auf die Sicherheit. Was auf der einen Seite Erleichterung schafft, breingt auf der anderen Seite ein gewisses Gefahrenpotential mit sich. Dies gilt vorallem in Bezug auf User mit Passwort-Athentifizierung, wo es passieren kann das versehentlich ein Zugriff auf andere Datenbanken gegeben werden kann. Dies kann man jedoch durch den RESTRICTED_USER Modus der Datenbanken verhindern. Kerberos-Authentifizierung kann nicht mit "Contained Databases" verwendet werden. Ein weiterer Nachteil ist das es nur die Option PARTIAL für "Contained Databases" gibt. Dies bedeutet das einige Funktionen, die die Anwendungsgrenze überschreiten nicht in der Datenbank gespeichert werden. Dies bedeutet das doch nicht alle Abhängigkeiten bei einer Verschiebung der Datenbank vorhanden sind. Aber vielleicht wird es in der Zukunft oder vielleicht schon mit der ersten offiziellen Version, noch eine FULL Option geben. Das Anlegen einer solchen Datenbank, ist jedoch erstmal mit einigen Konfigurationseinstellungen verbunden. Wer sofort eine Datenbank mit der neuen Option Einschlusstyp = Teilweise anlegen möchte, bekommt diese Fehlermeldung: Datenbankcontainer01 Der Grund dafür ist, das dieses Feature im Standard nicht aktiviert ist. Da gilt immer noch das altbekannte Verfahren. Die "Contained Databases" lassen sich so aktivieren:
EXEC SP_CONFIGURE 'show advanced options',1
RECONFIGURE
GO
EXEC SP_CONFIGURE 'contained database authentication',1
RECONFIGURE
GO
Jetzt kann die neue Datenbank angelegt werden. Datenbankcontainer02 Anschließend kann wie gewohnt in der Datenbank unter Sicherheit der entsprechende User angelegt werden. Datenbankcontainer03 Auch die Anlage eines Windows Users ist möglich. Dazu wir gewohnt den Benutzertyp "Windows User" auswählen und das Passwort leer lassen. Diese Benutzerinformationen werden jetzt lokal in der jeweiligen Datenbank gespeichert und es gibt keine Verbindung mehr zu MASTER Datenbank. Dies hat zur Folge das man beim Zugriff auf dem SQL Server immer die Datenbank mit angeben muß. Beim Zugriff per SSMS kann dies über die erweiterten Optionen bei der Anmeldung geschehen. Datenbankcontainer04 Auch die anschließende Sicht sieht etwas anders auch, als gewohnt. Man sieht nur noch die entsprechende Datenbank. Datenbankcontainer05