it-swarm.com.de

Gewähren Sie "NT AUTHORITY \ SYSTEM" Systemadministrationsberechtigungen.

Für SQL Server 2012 und höher lautet as Neue Funktionen in der SQL Server-Installation :

BUILTIN\Administratoren und Lokales System ( NT AUTHORITY\SYSTEM ) werden in der festen Serverrolle sysadmin nicht automatisch bereitgestellt.

In meinem Fall ist dies zu einem Problem geworden: Ich habe ein WiX-Installationsprogramm, das einen Custom Action C++ - Code zum Einrichten von Datenbankdaten verwendet (Datenbank, Ansichten, Prozeduren, Daten usw. erstellen). Custom Action Wird als Benutzer NT AUTHORITY\SYSTEM Ausgeführt, aber dieses Konto hat keine Berechtigung zum Ausführen von CREATE DATABASE - Skripten.

  1. Ist es richtig, NT AUTHORITY\SYSTEM Während der Installation der Software die Rolle sysadmin zuzuweisen? Oder gibt es vielleicht eine bessere Lösung?

  2. Wenn es korrekt ist, ist es möglich, den richtigen Benutzernamen für NT AUTHORITY\SYSTEM Zu finden? Ich benötige diesen Namen, um die Berechtigungen * zu ändern. In verschiedenen Regionen ist dieser Name unterschiedlich, z. B. NT AUTHORITY\SYSTEM Oder NT AUTHORITY\СИСТЕМА.


Hinzufügen von NT AUTHORITY\SYSTEM Zur Rolle sysadmin:

IF NOT EXISTS
(
    SELECT name
    FROM master.sys.server_principals 
    WHERE IS_SRVROLEMEMBER ('sysadmin', name) = 1 
    AND name LIKE 'NT AUTHORITY\SYSTEM'
)
EXEC master..sp_addsrvrolemember
    @loginame = N'NT AUTHORITY\SYSTEM', @rolename = N'sysadmin'

Das Suchen von sys.server_principals Nach name LIKE 'NT AUTHORITY\%' Funktioniert nicht, da manchmal mehr als ein NT AUTHORITY\... Benutzer vorhanden ist. Ich bin auf einer meiner virtuellen Maschinen auf einen solchen Fall gestoßen.

6
mosg

Sie können den Namen bekannte Sicherheitskennungen (SIDs) mithilfe eines PowerShell-Skripts abrufen:

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-18")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

Persönlich musste ich dies nie mit C/C++ - Code tun. Siehe MSDN-Artikel über die WINAPI oder System.Security Namespace für verwalteten Code.

Es gibt ein kompaktes Beispiel in den Fragen und Antworten zum Stapelüberlauf WinAPI LookupAccountSid aus einer .evt-Datei von Remy Lebea :

static const DWORD MAX_BUFF_SIZE = 256;

wstring userNameFromSid(SID userSid, wstring computerName)
{
    wchar_t buffName[MAX_BUFF_SIZE];
    DWORD buffNameSize = MAX_BUFF_SIZE;
    wchar_t buffDomain[MAX_BUFF_SIZE];
    DWORD buffDomainSize = MAX_BUFF_SIZE;
    SID_NAME_USE SidType;

    if (LookupAccountSid(!computerName.empty() ? computerName.c_str() : NULL, &userSid, buffName, &buffNameSize, buffDomain, &buffDomainSize, &SidType))
    {
        return buffName;
    }

    /*Here some code to print error in a Message box*/
    return L"";
}

Gibt es ein Problem beim Platzieren von NT AUTHORITY\SYSTEM in der SQL Server sysadmin Rolle beim Installieren von Software von einer zuverlässigen Quelle? Es sollte kein Problem geben, hoffe ich, aber wer weiß ...

2
Serg