dbatools – Copy-SqlLogin – Wie man Kunden beeindrucken kann

Twitter RobSewell dbatools Contributors at SQLGrillen 2017

Für einen Kunden habe ich diese Woche einen neuen SQL Server 2016 SP1 + Management Studio installiert und konfiguriert, alle notwendigen Housekeeping-Jobs eingerichtet und mich um meine dokumentarischen Pflichten gekümmert. Über meine Rückmeldung, dass ich den Server bereits fertig hatte, freute sich mein Kunde und bat mich dann per Mail um folgendes:

[…]
Sent: Wednesday, June 21, 2017 3:43 PM

Außerdem sollten die SQL-User vom SQL01 übernommen werden (wenn möglich).
Geht das?
[…]

Vor zwei Jahren hätte ich wahrscheinlich geantwortet: „Ich versuche es, kann aber für nichts garantieren. Ich melde mich dann in 2 Tagen wenn ich fertig bin…“
Dann hätte ich mich daran gemacht und alle vorhanden Logins und deren Rechte auf Instanz- und Datenbankebene heraus geskriptet, auf dem neuen SQL Server eingespielt und den Kunden gebeten zu testen… (natürlich in der Hoffnung, dass alle Passwörter und Rechte passen) Mein Gott war das immer ein Aufwand, bei zwei oder drei Accounts war das ja gar nicht so das Problem, aber was wenn es plötzlich 100 Accounts sind 😮

Aber da gab es ja die Powershell-Modul-Sammlung von dbatools noch nicht, mit der ich ja bereits großartige Erfahrungen gemacht, schon in einigen Talks darauf hingewiesen und in meinem Blog darauf hingewiesen habe.

In dbatools gibt es eine Funktion „Copy-SqlLogin“, welcher laut Beschreibung alle meine gewünschten Aufgaben in einer Powershell Zeile vereint!

This command migrates logins from source to destination SQL Servers. Supports SQL Server versions 2000 and above. Migrates logins with SIDs, passwords, defaultdb, server roles & securables, database permissions & securables, login attributes (enforce password policy, expiration, etc).
By default, all logins with the exception of system (####Example Login## and local (SERVERNAME\administrators) logins are copied. The -Logins parameter is autopopulated for command-line completion and can be used to copy only specific logins.
If the login already exists on the destination, it will be skipped unless -Force is specified. Force drops and recreates the login.

Da die Anforderung des Kunden lautete „die SQL-User vom SQL01 übernommen werden“, brauchte ich nicht vorher zu analysieren, sondern einfach alle vorhandenen User des alten Servers auf den neuen Server migrieren. Dazu einfach die aktuelle Modul-Sammlung herunterladen, sicherstellen dass auf dem neuen Server auch mindestens Powershell 3 installiert ist. Wenn alles vorhanden ist, müssen die Module nur import werden und schon kann man mit den dbatools loslegen und alle Kommandos auf der Commandline ausführen oder in Scripten verwenden.

Um die Kundenanforderung zu erfüllen, nutze ich also die ganz einfache Kommandozeile:

Import-Module .\dbatools-master\dbatools.psd1
Copy-SqlLogin -Source SQL01 -Destination SQL02

Die Ausführung des Scriptes hat kaum 2 Minuten gedauert und alle User waren migriert!

Durch diese sehr starke Vereinfachung der Account Migration von einem SQL Server zum anderen, konnte ich dem Kunden sehr schnell eine Abschluss-Meldung schicken.

Gesendet: Mittwoch, 21. Juni 2017 15:56
Bitte sehen Sie diesen Task als erledigt an.

Die Antwort meines Kunden kam umgehend 😉

Sent: Wednesday, June 21, 2017 3:59 PM
Danke. Respekt!

(Man muss dazu wissen, dass diese Worte von diesem Kunden(-Mitarbeiter) schon „Gewicht“ haben, da dieser sonst nicht so leicht zu beeindrucken ist, daher freuen mich diese Worte sehr!)

Vielen Dank an Chrissy LeMaire und die dbatools-Community für diese hervoragende Arbeit!

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.