Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Chraňte databázovou aplikaci na vrstvách připojení, identity, dotazu a nasazení. Úspěšná autentizace nedokazuje, že spojení používá Transport Layer Security (TLS) k ověření serveru nebo že identita má pouze oprávnění, která aplikace potřebuje.
Kontrolní seznam zabezpečení
| Plocha | Action |
|---|---|
| Síťové šifrování. | Používejte Encrypt=true nebo Encrypt=Strict na kompatibilních endpointech a udržujte TrustServerCertificate=false si pro vzdálené produkční připojení. |
| Authentication. | Preferuji integrovanou autentizaci Windows, spravovanou identitu nebo identitu pracovní zátěže, pokud je podporuje cílová a hostitelská zátěž. |
| Autorizace | Udělit pouze požadovaná oprávnění k databázi. Používejte samostatné identity pro nasazování schématu a žádosti o aplikace. |
| Konstrukce dotazu. | Parametrizujte datové hodnoty. Vyberte identifikátory, které nelze použít jako parametry, ze seznamu povolených aplikací řízeného aplikací. |
| Konfigurace připojení. | Použití SqlConnectionStringBuilder a konfigurace důvěryhodného koncového zařízení. Nespojujte uživatelsky ovládané fragmenty spojovacích řetězců. |
| Tajemství. | Použijte chráněný tajný úložiště nebo identitu hostitele. Nikdy nepřikládejte hesla, soukromé klíče ani nositelné tokeny. |
| Sdružování. | Udržujte výběr identity konzistentní s klíčem poolu, zejména u token callbacků. |
| Chyby a diagnostika. | Vrátit bezpečně formulované chyby aplikace a zachovat omezené diagnostické podrobnosti bez přihlašovacích údajů nebo tokenů. |
| Údržba. | Aktualizujte podporované závislosti ovladačů a identitních knihoven a procvičujte chování připojení a autentizace po upgradech. |
Viz Šifrování a ověřování certifikátů před změnou nastavení v reakci na chybu certifikátu.
TrustServerCertificate=true odstraní kontrolu identity; neopraví nasazení certifikátu.
Běžné hrozby
Zkontrolujte, jak nedůvěryhodný vstup dosahuje příkazů databáze a nastavení připojení, která identita vykonává jednotlivé operace a jaké diagnostické informace opouští vaši službu.
Injektáž SQL
SQL injection nastává, když aplikace považuje nedůvěryhodný vstup za spustitelný Transact-SQL (T-SQL) místo dat. Používejte parametry příkazů pro hodnoty, s explicitními typy a vhodnými velikostmi. Ověřte vstupní údaje také z hlediska obchodních pravidel.
Uložené procedury nebrání injekci, pokud spojují nedůvěryhodný vstup do dynamického SQL. Pomocí sp_executesql parametrizujte dynamické příkazy, kde je to vhodné. Pokud se název tabulky, název sloupce nebo směr třídění musí měnit, vyberte jej z aplikačně řízeného seznamu povolení; běžné hodnotové parametry nemohou nahradit identifikátory nebo syntaxi SQL.
Nespoléhejte se jen na escapování uvozovek, tvůrce připojovacího řetězce nebo objektově relační mapovač, aby byl libovolný nezpracovaný SQL dotaz bezpečný. Viz Příkazy a parametry a Zápis bezpečného dynamického SQL.
Zvýšení oprávnění
Spouštějte aplikační požadavky pod nejméně privilegovanou databázovou identitou. Neudělujte administrátorovi serveru nebo vlastníkovi databáze oprávnění jen proto, abyste chybu v aplikaci vymazali.
Oddělte přihlašovací údaje pro migraci schématu od přihlašovacích údajů za běhu. Udělujte přístup prostřednictvím rolí odpovídajících požadovaným tabulkám nebo postupům. Používejte podepisování certifikátů nebo pečlivě zaměřené napodobování pouze tehdy, když operace vyžaduje oprávnění přesahující ta volajícího, a tuto hranici si přehledejte zvlášť.
Autentizace není autorizace aplikace. Pokud se služba připojí jako jedna databázová identita pro mnoho uživatelů, musí stále vynucovat, ke kterým záznamům a operacím má každý uživatel přístup.
Sondování a inteligentní pozorování
Nevracejte surové údaje o výjimkách databáze, spojovací řetězce ani stopy zásobníků nedůvěryhodným klientům. Vraťte chybu na úrovni aplikace a korelacní identifikátor, pokud je to vhodné.
Uchováváte diagnostické záznamy v omezeném systému logování. Zaznamenejte informace jako operaci, chybu SqlClient, pokus o opakování a identifikátor korelace. Před jejich sběrem nebo exportem si prohlédněte text výjimek a konfiguraci trasování na text dotazu, hodnoty parametrů, koncové body nebo osobní data.
Řešit chyby explicitně. Nepřevádějte neúspěšný dotaz nebo autentizační pokus na úspěšnou odpověď s prázdnými daty. Selhání certifikátu, neplatné přihlašovací údaje nebo odepřené povolení vyžaduje opravu místo neomezených pokusů.
Autentizace
Použijte identitu odpovídající hostiteli aplikace. Windows authentication nevyžaduje ukládání SQL hesla. Pracovní zátěže hostované v Azure mohou používat spravovanou identitu, pokud je podporována; federované hostitele mohou používat identitu zátěže. Interaktivní autentizace je určena pro uživatele, nikoli pro služby bez dozoru.
Použijte SqlConnectionStringBuilder k přiřazení hodnot řetězce spojů. Správně uvádí a uchází hodnoty, ale neautorizuje cíle. Server, databázi, autentizační režim a TLS politiku udržujte pod kontrolou aplikace nebo administrátora.
Nedovolte, aby nedůvěryhodný požadavek vybral TrustServerCertificate, Encrypt, Authentication, nebo libovolnou adresu serveru. U aplikací s více tenanty určujte konfiguraci autorizovaného tenanta namísto přijímání úplných připojovacích řetězců z požadavků.
Viz ověřování SQL Serveru a Windows a ověřování Microsoft Entra.
Passwords
Když je potřeba SQL autentizace nebo klientské tajné přihlašovací údaje, získejte tajemství z chráněné konfigurace nebo tajného úložiště. Omezte přístup ke čtení, rotujte tajemství a po nasazení odstraňte staré přihlašovací údaje.
Proměnné prostředí mohou přenášet vklučovaná tajemství, ale nejsou tajným úložištěm a mohou být odhaleny diagnostikou procesů nebo nástroji pro nasazení. Netiskněte je ani je nezařazujte do hlášení o pádech. Vývojové tajemství držte mimo kontrolu zdrojových kódů.
Nechte Persist Security Info=false, výchozí. Toto nastavení omezuje zpřístupnění prostřednictvím vlastnosti „connection string“ otevřeného připojení; nesmaže původní konfigurační řetězec ani nechrání tajný údaj, který jste zaznamenali do protokolu.
Přístupové tokeny a sdružování připojení
Poolová spojovací skupina znovu využívá ověřená fyzická spojení. Každý fond ponechte přiřazený k určenému bezpečnostnímu kontextu.
- Doslovný
AccessTokenhráč se účastní klíče do bazénu. SqlClient ji nemůže obnovit ani odvodit její vypršení z této vlastnosti. Spravujte životnost tokenů a podle potřeby vymažte postižené pooly. -
AccessTokenCallbackje součástí klíče poolu. Znovu použijte stabilního delegáta a přihlašovací instanci pro spojení, která by měla sdílet pool. - Pro stejné vstupní parametry callbacku vraťte stejný identifikátor. Nečtěte identitu aktuálního uživatele webu v rámci sdíleného callbacku, pokud vstupy poolu konzistentně neizolují tuto identitu.
- Nikdy nelogujte přístupové tokeny, klientská tajemství, soukromé klíče certifikátů ani kompletní spojovací řetězce s přihlašovacím údajem.
Použijte pokyny pro zpětné volání tokenů k implementaci akvizice a obnovy. Token callback nepřizpůsobuje validaci TLS certifikátů.
Nasazení a hranice služeb
Používejte podporované verze od Microsoft. Data.SqlClient a autentizační knihovnu. Udržujte verze základních ovladačů a rozšíření Azure sladěné, když používáte režimy Microsoft Entra poskytované ovladačem. Testujte upgrady podle konfigurace certifikátu vašeho serveru a skutečného autentizačního procesu, nejen podle parsování spojovacích řetězců.
Udržujte databáze mimo veřejné sítě, kde je to možné, a omezujte přístup k požadovaným koncovým bodům aplikace. TLS chrání provoz během přenosu; nevynucuje oprávnění databáze ani nešifruje databázové soubory na disku.
LocalDB je vývojový nástroj pro Windows. Chraňte jeho soubory a nepoužívejte spuštění pouze z LocalDB jako důkaz vzdáleného chování TLS nebo Microsoft Entra.
Před přijetím funkce SQL Server zkontrolujte možnosti cílové destinace. SQL databáze v Microsoft Fabric vyžaduje identity Microsoft Entra a nepodporuje SQL přihlašování, aplikační role ani tabulky s vždy šifrovaným kódem. Viz omezení databáze Fabric SQL.
V této části
Write secure dynamic SQL vysvětluje, jak parametrizovat dynamické příkazy a kontrolovat oprávnění k vykonávání.