Wann wurde das Kennwort des SQL Server-Systemadministrators (sa) letztmalig geändert?

Wenn bei der Installation auf der Seite Authentifizierungsmodus - Gemischter Modus ausgewählt wurde, oder nachträglich der Server-Authentifizierungsmodus auf SQL Server und Windows-Authentifizierungsmodus geändert wird, muss ein Kennwort für den SQL Server-Systemadministrator (sa) eingegeben und bestätigt werden. Das Konto des SQL Server Systemadministrator (sa) ist standardmäßig Mitglied der festen Serverrolle sysadmin und kann somit alle Aktivitäten auf dem Server ausführen.

Somit ergibt sich natürlich auch eine besondere Betrachtungsweise hinsichtlich des Konto des SQL-Server-Systemadministrators (sa) und seines Kennwortes. In vielen Unternehmen werden von den Domänen-Administratoren Kennwortrichtlinien erstellt bzw. erlassen, meist im Zusammenhang mit IT-Security Richtlinien und übergeordnet im Thema "IT Sicherheit im Unternehmen" bzw. IT-Grundschutz (siehe bsi). Kennwörter müssen sicher sein, das heißt zum Beispiel, dass es mindestens 8 Zeichen enthalten soll, es Großbuchstaben und Kleinbuchstaben enthält, es Zahlen und alphanumerische Zeichen enthält. - Es sollte nicht das Computerkonto sein und nicht einschlägig bekannte Wörter wie "Admin", "Passwort" etc. enthalten. Weiterhin wird meist festgelegt, das dass Kennwort nach einer bestimmten Zeit abläuft, oder das dass Anmeldekonto nach x Fehlanmeldungen gesperrt wird, Anmeldezeiten werden festgelegt etc.

Oft ist aber gerade das Konto des SQL-Server Systemadministrators (sa) dabei ein Stiefkind, regelmäßige Änderungen des Kennwortes- monatlich, vierteljährlich oder halbjährlich - und die Überwachung der Kennwortrichtlinie ist in den meisten Organisationen bzw. Unternehmen keine gängige Praxis, auch das Ausscheiden eines Datenbankadministrators oder Domänen Administrators wird in diesem Zusammenhang oft übersehen.

Der erste Schritt in diesem Prozess ist es, herauszufinden, wann das Kennwort letztmalig geändert wurde und wer diesen Login braucht bzw. muss der Gemischte Modus aktiviert sein. An dieser Stelle möchte ich die Frage unbeantwortet im Raum stehen lassen, nicht weil ich ihr ausweichen will - sondern sie als Denkanstoß verstehe.

 

SQL Server 2000

Im SQL Server 2000 gibt es keinen dokumentierten Prozess, die Änderung des sa Kennwortes zu ermitteln. Das beste Mittel, um festzustellen, ob das sa-Kennwort geändert wurde, ist der Wert aus der Spalte updatedate in der Tabelle master.dbo.syslogins. Dieser Wert scheint die einzige Möglichkeit zu sein, um festzustellen, ob das Konto des SQL-Server Systemadministrator (sa) geändert wurde. Allerdings, ist es wichtig zu wissen, dass Änderungen der Standard Server Eigenschaften (Sprache, Standard-Datenbank etc.), auch Auswirkungen auf die Spalte updatedate haben. Da aber das gleichzeitig ändern dieser Eigenschaften eher unwahrscheinlich ist, kann diese Spalte als Indikator zur Kennwortänderung benutzt werden.

USE Master
GO
SELECT sid, [name], createdate, updatedate
FROM master.dbo.syslogins
WHERE [name] = 'sa'
GO

 

SQL Server 2005

Im SQL Server 2005 könnte man nun die gleiche Abfrage wie in SQL Server 2000 anwenden - unter Berücksichtigung der aufgeführten Einschränkungen, aber da das Sicherheitsmodell im SQL Server 2005 überarbeitet worden ist, wurde auch - im Allgemeinen - an die Richtlinieneinstellungen für Anmeldungen gedacht, welche natürlich auch für das Konto des SQL-Server Systemadministrators (sa) angewendet werden kann. Die interne Funktion LOGINPROPERTY gibt Informationen zu Richtlinieneinstellungen für die Anmeldung zurück. LOGINPROPERTY, auf das Konto des SQL-Server Systemadministrator (sa) angewendet:

SELECT LOGINPROPERTY ('sa', 'PasswordLastSetTime') AS 'PasswordLastSetTime'

Gibt folgendes Ergebnis als Beispiel zurück:

PasswordLastSetTime
2008-04-04 11:39:44.687

(1 Zeile(n) betroffen)

Darüber hinaus kann man natürlich aus dieser Funktion wesentlich mehr Informationen erhalten.

DECLARE @name nchar(100)
SET @name ='sa'

SELECT	
LOGINPROPERTY( @name, 'PasswordLastSetTime' )
	AS PasswordLastSetTime,
LOGINPROPERTY( @name, 'IsExpired' )
	AS IsExpiried,
LOGINPROPERTY( @name, 'IsLocked' )
	AS IsLocked,
LOGINPROPERTY( @name, 'IsMustChange' )
	AS IsMustChange,
LOGINPROPERTY( @name, 'LockoutTime' )
	AS LockoutTime,
LOGINPROPERTY( @name, 'BadPasswordCount' )
	AS BadPasswordCount,
LOGINPROPERTY( @name, 'BadPasswordTime' )
	AS BadPasswordTime,
LOGINPROPERTY( @name, 'HistoryLength' )
	AS HistoryLength,
LOGINPROPERTY( @name, 'PasswordHash' )
	AS PasswordHash
GO

Die o.a. Abfrage liefert folgende Ergebnisse zurück:

  • PasswordLastSetTime gibt das Datum zurück, an dem das aktuelle Kennwort festgelegt wurde
  • IsExpired ob die Anmeldung abgelaufen ( 0 oder 1 = abgelaufen)
  • IsLocked ob die Anmeldung gesperrt ist (0 oder 1 = gesperrt)
  • IsMustChange ob das Kennwort, bei der nächsten Anmeldung geändert werden muss (0 oder 1 = ändern)
  • LockoutTime gibt das Datum zurück, an dem die SQL Server-Anmeldung gesperrt wurde (Fehlanmeldungen)
  • BadPasswordCount gibt die Anzahl aufeinander folgender Fehlanmeldungen zurück
  • HistoryLength, länge der Zeit zur Durchsetzung der Kennwortrichtlinie
  • PasswordHash Hash des Kennworts

 

SQL Server 2008 / R2

Ab der SQL Server Version 2008 wurde die interne Funktion  LOGINPROPERTY mit drei weiteren Argumenten versehen:

  • DaysUntilExpiration gibt die Anzahl von Tagen zurück, bis das Kennwort abläuft (0 = abgelaufen, -1 = läuft nie ab, NULL = CHECK_POLICY oder CHECK_EXPIRATION ist für die Anmeldung auf OFF festgelegt oder wenn das Betriebssystem die Kennwortrichtlinie nicht unterstützt)
  • DefaultDatabase gibt die Standarddatenbank für die SQL Server-Anmeldung zurück
  • DefaultLanguage gibt die Standardsprache für die SQL Server-Anmeldung zurück
DECLARE @name nchar(100)
SET @name ='sa'

SELECT	
LOGINPROPERTY( @name, 'PasswordLastSetTime' )
	AS PasswordLastSetTime,
LOGINPROPERTY (@name, 'DaysUntilExpiration' )
	AS DaysUntilExpiration,
LOGINPROPERTY (@name, 'DefaultDatabase' )
	AS DefaultDatabase,	
LOGINPROPERTY (@name, 'DefaultLanguage' )
	AS DefaultLanguage	
GO

Alles in allem eine Recht interessante Funktion, die nicht nur ihre Anwendung hinsichtlich des SQL-Server Systemadministrator (sa) findet, sondern natürlich für jede SQL Server-Anmeldung - und auch nur für diese gilt.

Das Script finden Sie als Anhang zu diesem Artikel.

CU

tosc - Sapere aude!