How to transfer logins and passwords between instances of SQL Server

USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
  DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
GO
 
IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary  varbinary (256)
DECLARE @PWD_string  varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr  varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)

DECLARE @defaultdb sysname
 
IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR

      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
  DECLARE login_curs CURSOR FOR


      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
  PRINT 'No login(s) found.'
  CLOSE login_curs
  DEALLOCATE login_curs
  RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
WHILE (@@fetch_status <> -1)
BEGIN
  IF (@@fetch_status <> -2)
  BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@type IN ( 'G', 'U'))
    BEGIN -- NT authenticated account/group

      SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
    END
    ELSE BEGIN -- SQL Server authentication
        -- obtain password and sid
            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
        EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
        EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
 
        -- obtain password policy state
        SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
        SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
 
            SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

        IF ( @is_policy_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
        END
        IF ( @is_expiration_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
        END
    END
    IF (@denylogin = 1)
    BEGIN -- login is denied access
      SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
    END
    ELSE IF (@hasaccess = 0)
    BEGIN -- login exists but does not have access
      SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
    END
    IF (@is_disabled = 1)
    BEGIN -- login is disabled
      SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
    END
    PRINT @tmpstr
  END

  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
   END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO
EXEC sp_help_revlogin

ADSyncExportDeletionThreshold

$AzureCred = Get-Credential
$AzureCred = Get-Credential
Import-Module ADSync
Get-ADSyncExportDeletionThreshold -AADCredential $AzureCred
Disable-ADSyncExportDeletionThreshold -AADCredential $AzureCred
Get-ADSyncExportDeletionThreshold -AADCredential $AzureCred
Enable-ADSyncExportDeletionThreshold -AADCredential $AzureCred


[Enable-ADSyncExportDeletionThreshold -DeletionThreshold 500 {or more} -AADCredential $AzureCred]


Get-ADSyncExportDeletionThreshold -AADCredential $AzureCred

SQL Installation – Fehler

SQL-Server: Fehler beim Warten auf das Wiederherstellungshandle des Datenbankmoduls

Nicht immer läuft die Installation des Microsoft SQL Servers  problemlos ab. Wer die Meldung „Fehler beim Warten auf das Wiederherstellungshandle des Datenbankmoduls“ bzw. den Code 0x851A001A als Fehler bei der Installation erhält – so wirds einfach und schnell gelöst!

Der Fehler tritt insbesondere bei der Installation von SQL Server Express auf – kann aber auch bei anderen SQL Server Versionen auftreten.

Lösung

Bereinigung

Zuerst einmal muss die mit dem Fehler installierte SQL – Instanz deinstalliert werden. Es ist nicht nötig, den ganzen SQL-Server zu deinstallieren(!)

Dazu wechselt man zu den Programmen, wählt den SQL – Server aus (z.B. SQL Server Express 2014) und klickt auf Deinstallieren.

MS SQL Server deinstallieren

(Hinweis:Die Funktion Reparieren hilft bei diesem Problem nicht).

Anschliessend klickt man sich durch den Assistenten und entfernt das Datenbankmodul (und nur das!) der entsprechenden Instanz.

Modifizierte Installation

Anschliessend ist alles bereit für eine neue, leicht modifizierte Installation des SQL-Servers. Ein Neustart ist nicht nötig aber empfohlen.

Bei der Installation der „neuen Instanz“ folgt man wiederum dem Assistenten, bis man zur Eingabemaske Serverkonfiguration kommt.

Hier ändert man den Kontonamen des SQL Server-Datenbankmoduls manuell (d.h. Eingeben oder Copy & Paste) wie folgt ab:

NT AUTHORITY\NETWORK SERVICE

SQL Server Dienst anpassen

Anschliessend kann die Installation abgeschlossen werden; es  sollten keine weiteren Fehlermeldungen auftreten – und auch der SQL – Server Dienst sollte problemlos gestartet werden.

Sag mir wo die Values sind

Here is the complete stored procedure code:

CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = “
SET @SearchStr2 = QUOTENAME(‚%‘ + @SearchStr + ‚%‘,““)

WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = “
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + ‚.‘ + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ‚BASE TABLE‘
AND QUOTENAME(TABLE_SCHEMA) + ‚.‘ + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + ‚.‘ + QUOTENAME(TABLE_NAME)
), ‚IsMSShipped‘
) = 0
)

WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN (‚char‘, ‚varchar‘, ’nchar‘, ’nvarchar‘)
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)

IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
‚SELECT “‘ + @TableName + ‚.‘ + @ColumnName + “‘, LEFT(‚ + @ColumnName + ‚, 3630)
FROM ‚ + @TableName + ‚ (NOLOCK) ‚ +
‚ WHERE ‚ + @ColumnName + ‚ LIKE ‚ + @SearchStr2
)
END
END
END

SELECT ColumnName, ColumnValue FROM #Results
END

 

Logs komprimieren und automatisch löschen

PS:​

$RootLogFolder = „D:\Log“
$ArchiveSubfolder = ‚Archiv‘
$Heute = Get-Date
#delete logfiles — delete files older than 90d
$logfolders = Get-Childitem $RootLogFolder
foreach ($logfolder in $logfolders){
    If ($logfolder.exists)
    {
            Get-Childitem $logfolder.PSPath -recurse | Where-Object {($Heute – $_.LastWriteTime).Days -gt 89} | Remove-Item
    }
}
#archive and compress logfiles
foreach ($WildcardPattern in @(‚*.log.2*‘,’*_20*.log‘,’*.log-2*‘,’*.txt-2*‘)) {
    foreach ($logfile in Get-ChildItem -Recurse -LiteralPath $RootLogFolder -File -Force -Filter $WildcardPattern -Attributes !Compressed) {
        if ($logfile.Directory.Name -eq $ArchiveSubfolder) {
            continue
        }
        $DestinationFolder = Join-Path -Path $logfile.DirectoryName -ChildPath $ArchiveSubfolder
        If ((Test-Path $DestinationFolder) -eq $false){
        mkdir $DestinationFolder | Out-Null
        }
        $DestinationLogfile = Move-Item -LiteralPath $logfile.FullName -Destination $DestinationFolder -PassThru
        $cimResult = Get-CimInstance -ClassName CIM_DataFile -Filter „name=’$($DestinationLogfile.FullName -replace ‚\\‘,’\\‘)'“ | Invoke-CimMethod -MethodName Compress
    }
}

 

Running Upgrade After Failure

If an upgrade attempt failed, and the underlying issue has been resolved, it may be the case that the upgrade needs tobe forced to be completed. One way of achieving this is by running the command-line version of the SharePoint Products and Technologies Configuration Wizard.

To force an upgrade

1.       Open a Command Prompt window.

2.       Change to the following directory: <system drive>\Program Files\Common Files\Microsoft Shared\web server extensions\14\BIN.

3.       Type the following at the command prompt:

psconfig –cmd upgrade –inplace b2b –wait –force

-WAIT = No timer job so the upgrade happens in real time in the psconfig process.

-FORCE = Removes all existing upgrade jobs incase a timer job is stuck.

 

 

Anm: Found in social.technet. ms.com

Berechtigungen Profil-Ordner und Home Verzeichnisse

Um sicherzustellen, dass die Berechtigungen korrekt gesetzt sind, verwenden Sie die folgenden Richtlinien:
Wenn Sie die freigegebenen Ordner für servergespeicherte Benutzerprofile zu erstellen, beschränken den Zugriff auf den Ordner nur für Benutzer, die Zugriff benötigen.

Da ein Roaming-Profil persönliche Informationen, wie Dokumente des Benutzers und EFS-Zertifikate enthält, ist es wichtig, sicherzustellen, dass servergespeicherte Benutzerprofile sicher sind.

Hier sind einige Möglichkeiten, wie Sie die Sicherheit von servergespeicherten Benutzerprofilen zu verbessern:

 

Berechtigungen für die Home-Verzeichnisse Vorgabe für \home  ACL:Set Share Permissions for the Everyone group to Full Control.Use the following settings for NTFS Permissions:CREATOR OWNER – Full Control (Apply onto: Subfolders and Files Only)System – Full Control (Apply onto: This Folder, Subfolders and Files)TMB\FileServerAdmin – Full Control (Apply onto: This Folder, Subfolders and Files)Authenticated Users – Create Folder/Append Data (Apply onto: This Folder Only)Authenticated Users – List Folder/Read Data (Apply onto: This Folder Only) Authenticated Users – Read Attributes (Apply onto: This Folder Only)Authenticated Users – Traverse Folder/Execute File (Apply onto: This Folder Only) Vorgaben für \home\%username% ACL: OWNER for all sub files and folders %username%Use the following settings for NTFS Permissions: (ergibt sich durch Vererbung von \home)CREATOR OWNER – Full Control (Apply onto: Subfolders and Files Only)System – Full Control (Apply onto: This Folder, Subfolders and Files)TMB\FileServerAdmin – Full Control (Apply onto: This Folder, Subfolders and Files)

 

Berechtigungen für die Profil-Verzeichnisse Erforderliche Berechtigungen für die Dateifreigabe, die die Roamingbenutzerprofile hostetBenutzerkonto Access Gilt fürSystemVollzugriff Dieser Ordner, die Unterordner und DateienAdministratorenVollzugriffNur dieser OrdnerErsteller/BesitzerVollzugriff Nur Unterordner und DateienSicherheitsgruppe der Benutzer, die Daten in der Freigabe speichern müssen (Roamingbenutzerprofil-Benutzer und -Computer)Ordner auflisten / Daten lesen1Ordner erstellen / Daten anhängen1Nur dieser OrdnerAndere Gruppen und KontenKeine (entfernen) ​  ​​

 

NTFS-Berechtigungen für Roaming-Profil Übergeordneter Ordner

Roaming Profile Permission.jpg

Share level (SMB) Permissions for Roaming Profile Share

SMB Permission.jpg

NTFS Permissions for Each User’s Roaming Profile Folder

NTFS Permission.jpg

DISM for Dummies

Dism /Mount-Image /ImageFile:C:\xyz\SW_DVD9_Windows_Svr_Std_and_DataCtr_2012_R2_64Bit_German_-3_MLF_X19-53604\sources\install.wim /MountDir:C:\xyz\mount /index:

Dism /Get-ImageInfo /ImageFile:C:\xyz\SW_DVD9_Windows_Svr_Std_and_DataCtr_2012_R2_64Bit_German_-3_MLF_X19-53604\sources\install.wim

Dism /Image:C:\xyz\mount /Get-Features > featurelist.txt

featurelist.txt

Dism /Image:C:\xyz\mount /Enable-Feature /FeatureName:NetFx3serverFeatures

Dism /Image:C:\xyz\mount /Enable-Feature /FeatureName:NetFx3 /Source:C:\xyz\SW_DVD9_Windows_Svr_Std_and_DataCtr_2012_R2_64Bit_German_-3_MLF_X19-53604\sources\sxs

Dism /Unmount-Image /MountDir:C:\xyz\mount /Commit

Nagios – Von Grund auf

ACHTUNG! alle Hinweise in dieser Anleitung beziehen sich auf die HEUTE (01.03.2013) aktuelle Debian (6.07) und HEUTE unter Debian-Version in den Source vorhandene Nagios-Version (3.2.1)

Nach der Installation des Servers ist nur noch Nagios zu installieren. (Ich habe zusätzlich installiert: links, mc, nano)

  1. einmal (sicherheitshalber) apt-get update
  2. unter Debian apt-get install nagios3 nagios-plugins nagios-nrpe-server nagios-nrpe-plugin libnet-dns-perl snmp snmpd php5-snmp ipmitool gcc snmptt libsnmp-session-perl php5-snmp snmptt snmptrapfmt nagiosgrapher nagvis libgd-tools; während der installation wird noch das PW für „nagiosadmin“ abgefragt, welches der Anmeldung als admin an der Weboberfläche dient
  3. nach erfolgreicher installation kurz an der Weboberfläche anmelden http://<servername/server-ip>/nagios3 und darauf warten, das alle services des localhost „grün“ werden
  4. Ordner anlegen unterhalb von /etc/nagios3
    1. objects
      1. unterhalb von /etc/nagios3/objects/
        1. server
        2. printer
        3. switches
        4. router
        5. wlan
        6. kassen
        7. website
        8. servicegroups
  5. im file /etc/nagios3/nagios.cfg müssen einige Zeilen eingetragen werden (ab 5.2) in 5.1 steht der Block UNTER den die Zeilen müssen
    1. # You can also tell Nagios to process all config files (with a .cfg
      # extension) in a particular directory by using the cfg_dir
      # directive as shown below:
    2. cfg_dir=/etc/nagios3/objects/server
    3. cfg_dir=/etc/nagios3/objects/printer
    4. cfg_dir=/etc/nagios3/objects/switches
    5. cfg_dir=/etc/nagios3/objects/router
    6. cfg_dir=/etc/nagios3/objects/wlan
    7. cfg_dir=/etc/nagios3/objects/kassen
    8. cfg_dir=/etc/nagios3/objects/website
    9. cfg_dir=/etc/nagios3/objects/servicegroups
  6. im file /etc/nagios3/nagios.cfg vor den Zeilen… „#“ entfernen
    1. #cfg_file=/etc/nagios3/objects/templates.cfg
    2. #cfg_file=/etc/nagios3/objectscommand.cfg
    3. #cfg_file=/etc/nagios3/objectstimeperiods.cfg
  7. im file /etc/nagios3/resource.cfg ganz unten unterhalb stehende Zeilen einfügen UND WICHTIG DARUNTER EINE LEERE ZEILE!!!
    1. $USER4$=Brandenburg1
    2. $USER5$=horst
  8. im file /etc/nagios3/nagios.cfg
    1. check_external_commands=0 auf 1 setzen; dadurch kann man in der Weboberfläche z.B. nagios neustarten, checks de-/aktivieren, …
  9. im file /etc/nagios3/cgi.cfg
    1. refresh_rate=90 auf 30 setzen; dadurch aktualisiert nagios die browseranzeige alle 30 sekunden
  10. für die Nutzung von NagiosGrapher müssen folgende Änderungen in der nagios.cfg vorgenommen werden
    1. process_performance_data=1
    2. service_perfdata_command=ngraph-process-service-perfdata-pipe
    3. anschlissend nagios restart
    4. gucken was im ngraph.log steht (/var/log/nagiosgrapher)
    5. gucken ob rrd erzeugt werden (/var/lib/nagiosgrapher)

 

 

 

Anm.:

  • die config-file von nagios unter debian(!) liegen unter /etc/nagios3
  • die plugins findet man in /usr/lib/nagios/plugins
  • zusätzliche Plugins im Plugin-Ordner:
    • check_bl
    • check_printer
    • check_ipmi
    • check_ipmi_sensor