none
Pod kterým účtem provozovat Microsoft SQL Server 2005 Express Edition

    Dotaz

  • Dobrý den,
    při instalaci sql serveru na Windows 2003 server je možnost zvolit Service (System) account, pod kterým server provozovat. Většinou je předdefinovaný Network Service, ale občas tento v nabídce není (nevím proč) a je k dispozici pouze Local System. V různých návodech na instalaci bývá také uveden Network Service. Když se nabídl pouze Local System, tak jsem začal pátrat po příčině a na http://msdn.microsoft.com/en-us/library/ms143170(SQL.90).aspx jsem se dozvěděl, že
     
    "We recommend that you do not use the Network Service account for the SQL Server. Local User or Domain User accounts are more appropriate for these SQL Server services."

    Přiznám se, že jsem z toho poněkud zmatený a moc nerozumím tomu proč.

    Bylo by možné toto nějak vysvětlit? 
    pondělí 30. listopadu 2009 16:05

Odpovědi

  • Dobrý den,

    geneze microsoftích doporučení ohledně SQL servisních účtů je velmi zajímavá. Toto poslední je podle mě nedávnou novinkou a je opravdu správné. (dříve byl network service doporučován a v SQL 2000 mu byl na roveň kladen i local system)
    Instalace se tedy dělí na dva případy:

    a) Mám doménu a služba poběží pod nově vytvořeným doménovým uživatelem určeným pro tuto službu (obyčejný domain user) Používám specifickou organizační jednotku v Active Directory se specifickou polikikou pro účty služeb a účtům dávám nějaká rozumná jména např DOMAIN\SS05-EXP-SRV01 (služba-instance-server).
    b)Nemám doménu, služba poběží pod nově vytvořeným lokálním účtem.

    Důvod proč ne local system je prostý. Libovolná operace, kterou provádí SQL server je privilegovaná. Čili postup zneužití je relativně jednoduchý, stačí zařídit spuštění xp_cmdshell z účtu v SQL, který má server roli sysadmin. Okamžitě mám kontrolu nad lokálním systémem, milé ne?. (ono to má několik úskalí xp_cmdshell je standardně vypnut a být sysadminem není tak samo od sebe, ale určitě by se dala vymyslet nějaká další kulišárna)

    Proč se vyhnout Network Service je to obtížnější. Účet služby je automaticky sysadminem ve vlastní instanci. Tj. pokud nainstalujete SQL server pod účtem služby, stává se NT AUTHORITY\NETWORK SERVICE účet sysadminem instance (naleznete jej v Security\Login). Případ výše se nekoná, protože Network Service nemá dostatek oprávnění na hokusy pokusy se systémem. Zneužití je poněkud rafinovanější a využívá vtipu, že na w2k3 vše běží standradně pod Network Service. Čili pokus může spočívat v tom, že jako dodavatel vám dodám aplikaci běžící pod IIS v DefaultAppPoolu (který opět použije NetworkService) pak se dá zařídit, že můj kód běží s identitou NetworkService a je sysadminem v SQL, tj přes SMO si mohu dělat s celým SQL serverem cokoliv a to jako externí dodavatel obyčejných webových stránek.

    Bohužel :-) od Windows Serveru 2008 je těmto hrátkám s Network Service konec, ale to by bylo ještě na delší povídání.

    středa 2. prosince 2009 0:42

Všechny reakce

  • Otazka zni proc se vlastne ptas :)

    Pokud napr. chces zalohovat databazi na sdileny sitovy disk je velice pohodlne vytvorit (idealne v domene) uzivatele ktery ma na tento disk pravo zapisovat a pod nim i spustit SQL Server.

    Systemovy ucet ma take maximalni prava, cokoliv co bezi pod systemovym uctem a je "heknuto" umozni utocnikovi neomezenou vladu nad prislusnym strojem

    MP
    pondělí 30. listopadu 2009 21:14
    Vlastník
  • Dobrý den,

    geneze microsoftích doporučení ohledně SQL servisních účtů je velmi zajímavá. Toto poslední je podle mě nedávnou novinkou a je opravdu správné. (dříve byl network service doporučován a v SQL 2000 mu byl na roveň kladen i local system)
    Instalace se tedy dělí na dva případy:

    a) Mám doménu a služba poběží pod nově vytvořeným doménovým uživatelem určeným pro tuto službu (obyčejný domain user) Používám specifickou organizační jednotku v Active Directory se specifickou polikikou pro účty služeb a účtům dávám nějaká rozumná jména např DOMAIN\SS05-EXP-SRV01 (služba-instance-server).
    b)Nemám doménu, služba poběží pod nově vytvořeným lokálním účtem.

    Důvod proč ne local system je prostý. Libovolná operace, kterou provádí SQL server je privilegovaná. Čili postup zneužití je relativně jednoduchý, stačí zařídit spuštění xp_cmdshell z účtu v SQL, který má server roli sysadmin. Okamžitě mám kontrolu nad lokálním systémem, milé ne?. (ono to má několik úskalí xp_cmdshell je standardně vypnut a být sysadminem není tak samo od sebe, ale určitě by se dala vymyslet nějaká další kulišárna)

    Proč se vyhnout Network Service je to obtížnější. Účet služby je automaticky sysadminem ve vlastní instanci. Tj. pokud nainstalujete SQL server pod účtem služby, stává se NT AUTHORITY\NETWORK SERVICE účet sysadminem instance (naleznete jej v Security\Login). Případ výše se nekoná, protože Network Service nemá dostatek oprávnění na hokusy pokusy se systémem. Zneužití je poněkud rafinovanější a využívá vtipu, že na w2k3 vše běží standradně pod Network Service. Čili pokus může spočívat v tom, že jako dodavatel vám dodám aplikaci běžící pod IIS v DefaultAppPoolu (který opět použije NetworkService) pak se dá zařídit, že můj kód běží s identitou NetworkService a je sysadminem v SQL, tj přes SMO si mohu dělat s celým SQL serverem cokoliv a to jako externí dodavatel obyčejných webových stránek.

    Bohužel :-) od Windows Serveru 2008 je těmto hrátkám s Network Service konec, ale to by bylo ještě na delší povídání.

    středa 2. prosince 2009 0:42
  • ad "Otazka zni proc se vlastne ptas"

    Na to je velmi jednoduchá odpověď - protože to nevím. :-)

    V tom dotazu jde také o to, že standardně(přesnějí dosud tomu tak vždy bylo) se se nabízí Network Service, no a při poslední instalaci Network Service vůbec nebyl v nabídce a byl k dispozici jen Local System. A já vůbec netuším, proč se tak stalo.  Proč se Network Service nenabízí.

    Je možné, že jsem před tím něco, čím jsem Network Service vyloučil spáchal, ale netuším co.
    čtvrtek 3. prosince 2009 6:57
  • Děkuji za vyčerpávající odpověď.

    V souvislosti s tím mě napadá doplnění výše položené otázky "čím jsem Network Service vyloučil".

    Je to možné tím, že v prvním případě kdy Network Service je nabídnut je SQL server instalován na server 2003, který je sice zapojen v doméně, ale neplní žádnou doménovou funkci. Je v režimu Standalone server a není ve skupině Domain Controlers a funguje v podstatě jen jako souborový server + server pro Intranet aplikace.

    V druhém případě, kdy Network Service není nabídnut, na server 2003 běží také Exchange server včetně Outlook web access.
    čtvrtek 3. prosince 2009 7:06
  • Dobrý den,

    scházející NT AUTHORITY\NETWORK SERVICE je divná záležitost. Když zkusíte na serveru, na kterém vám chybí Network Service, změnit účet pod kterým běží nějaká služba (Administrative Tools/ Services/ pravá myš Properties/ záložka Log-On) a tady když dáte browse tak ji naleznete?

    pondělí 7. prosince 2009 22:18