Ztratil jsem heslo sa na počítači a když se přihlásím k počítači přímo pomocí účtu ve skupině administrátorů, SQL Server Management Studio mi neumožňuje přihlášení pomocí ověřování systému Windows.
Mým plánem bylo jednoduše se přihlásit na server, připojit se pomocí Windows Authentication a resetovat sa tak, aby používal nové heslo. Protože se nemůžu připojit pomocí ověřování systému Windows, nebude to fungovat.
Jak jinak mohu resetovat heslo sa?
Podle pokynů uvedených v odkazu níže můžete obnovit heslo SA heslo:
Kroky shrnuté níže:
- Spusťte Správce konfigurace serveru SQL z nabídky Start> Programy> Microsoft SQL Server 20xx> Nástroje pro konfiguraci> relevantní pro nejnovější verzi nainstalovaného serveru SQL (např. Pokud máte nainstalovanou verzi 2005 a 2012, použijte verzi 2012). Nemáte nabídku Start? Na úvodní obrazovce Windows 8 začněte psát SQL Server Con ..., dokud se nezobrazí.
- Zastavte instanci serveru SQL, kterou je třeba obnovit klepnutím pravým tlačítkem na instanci v SQL Server Services a výběrem možnosti „Stop“
- Klepněte pravým tlačítkem myši na právě zastavenou instanci, klepněte na příkaz Vlastnosti a na kartě „Upřesnit“ v textovém poli Vlastnosti přidejte na konec seznamu možnost „; –m“ na možnost „Parametry spuštění“ (u novějších verzí můžete přejít přímo na kartu „Parametry spuštění“, zadejte „-m“ a klikněte na Přidat, aniž byste se museli bát syntaxe, středníku nebo čehokoli jiného).
- Klikněte na tlačítko „OK“ a restartujte instance serveru SQL
- Po spuštění instance serveru SQL v režimu pro jednoho uživatele se může účet správce systému Windows připojit k serveru SQL pomocí nástroje sqlcmd pomocí ověřování systému Windows. Pomocí příkazů Transact-SQL, například „sp_addsrvrolemember“, můžete do role serveru sysadmin přidat stávající přihlašovací jméno (nebo nově vytvořené).
Následující příklad přidá účet „Buck“ v doméně „CONTOSO“ do role sysadmin:
EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';
Po obnovení přístupu k sysadminu odeberte „; -m“ ze spouštěcích parametrů pomocí nástroje Configuration Manager a znovu spusťte instanci serveru SQL.
POZNÁMKA: se ujistěte, že mezi „;“ není mezera; a „-m“ je analyzátor parametrů registru citlivý na taková překlepy. Měli byste vidět položku v souboru SQL Server ERRORLOG, který říká „SQL Server spuštěn v režimu pro jednoho uživatele.“
Dodatečné zdroje:
Nakonec můžete vždy zkopírovat databázové soubory do jiné instance nebo dokonce přeinstalovat SQL Server (během tohoto procesu přidat místní účet jako sysadmin).
To, co uděláte, bude záviset na vaší verzi serveru SQL a také na tom, zda si můžete dovolit službu SQL Server snížit, aby bylo možné vytvořit nová pověření. První dvě metody zde nevyžadují restartování instance:
Můžete se připojit pomocí účtu NT AUTHORITY\SYSTEM
(nebo jinými metodami backdoor). V některých odpovědích jsou některé podrobnosti:
Mám také tip na MSSQLTips.com , který řeší tento problém:
V podstatě si stáhnete PSExec od Microsoftu a poté jej po instalaci nainstalujete Management Studio:
PsExec -s -i "C:\...\Ssms.exe"
Připojí se jako NT AUTHORITY\SYSTEM
a umožní vám dělat věci v Průzkumníku objektů, například:
Změňte instanci na režim SQL Server a Windows Authentication - klepněte pravým tlačítkem myši na název serveru, vlastnosti přístupů a změňte přepínač, pokud je aktuálně nastaven na Windows pouze:
Nastavte heslo pro účet sa
- rozbalte Zabezpečení, rozbalte přihlášení, klepněte pravým tlačítkem myši sa
a stiskněte Vlastnosti, a ve výsledném dialogu budou dvě pole pro zadání hesla:
Přidejte své vlastní přihlašovací jméno jako sysadmin
- klikněte pravým tlačítkem na Přihlášení, Nové přihlášení ... zadejte své přihlašovací jméno (ve tvaru DOMAIN\username
), přejděte na kartu Role serveru a zaškrtněte políčko sysadmin
a klikněte na OK:
(nebo pokud je vaše přihlašovací jméno již uvedeno, klepněte pravým tlačítkem myši na položku Vlastnosti a ujistěte se, že je v části Role serveru zaškrtnuto políčko sysadmin
)
Počínaje serverem SQL Server 2012 již NT Authority\SYSTEM
již nebyla ve výchozím nastavení udělena práva k serveru SQL. Takže další způsob, jak to udělat v těchto novějších verzích, byl podrobně Argenis Fernandez :
Otevřete regedit.exe
a změňte hodnotu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath
tak, aby ukazovala na SQLCMD.exe
, což bude v C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn
. Po úpravě by hodnota registru měla vypadat asi takto (omlouváme se za posouvání):
"C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
Zkuste znovu spustit službu SQL VSS Writer (zobrazí se chyba; to je v pořádku).
Nyní byste měli být schopni připojit se jako sysadmin
pomocí YourDomain\YourUserName
. Zastavte tedy službu SQL VSS Writer, opravte registr a restartujte službu (pokud potřebujete, aby byla spuštěna nebo byla spuštěna před spuštěním).
Ve druhém tipu jsem to prošel mnohem podrobněji:
I když jsem psal tento tip, použil jsem těžkopádnější přístup k vytvoření kopie SQLCMD.exe
a nahrazení sqlwriter.exe
- mnohem jednodušší je zaměřit službu přímo na SQLCMD.exe
.
Existuje oficiálně podporovaná cesta od společnosti Microsoft, která vyžaduje restartování instance v režimu jednoho uživatele:
K dispozici je také funkce dbatools.io , řešení Powershell pro správu serveru SQL, nazvané Reset-DbaAdmin
:
Vidím spoustu lidí, kteří žádají, aby Microsoft „opravil“ tyto takzvané „zranitelnosti“. Toto jsou platné přístupy k obnovení přístupu k instanci serveru SQL, kterou správně vlastníte. Všichni vyžadují zvýšená oprávnění pro fyzického hostitele, na kterém je umístěn SQL Server; jak jsem řekl několika lidem, pokud nechcete, aby se vývojáři hrávali s instalacemi serveru SQL, nedělejte z nich administrátory.