it-swarm-eu.dev

Existuje krátký způsob, jak „Auto_Fix“ osamocené uživatele v databázi SQL Server 2008 R2?

Opravit jednoho osamělého uživatele SQL k přihlášení je poměrně snadné:

EXEC sp_change_users_login 'Auto_Fix', 'user'

Mohl bych to skriptovat, ale existuje již uložená procedura, která se automaticky pokouší opravit každého osamělého uživatele v dané databázi?

16

Ted Krueger ( @ onpnt na Twitteru) napsal skvělý skript, který to dělá. Přidá přihlášení pro každého uživatele bez přihlášení a spustí auto_fix. Napsal dokonce i ten, který zahrnuje opravu přihlášení k systému Windows:

http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing-orphaned-database-users

Samozřejmě, pokud ji chcete otestovat jako první (nebo pouze provést audit), můžete komentovat řádky akcí (EXEC) a pouze vytisknout výsledky.

15
Aaron Bertrand

na základě výše uvedeného skriptu můžeme všechny uživatele v instanci opravit pomocí sp_MSForeachdb, jako je tento

declare @name varchar(150)
declare @query nvarchar (500)

DECLARE cur CURSOR FOR
    select name from master..syslogins

Open cur

FETCH NEXT FROM cur into @name

WHILE @@FETCH_STATUS = 0
BEGIN

set @query='USE [?]
IF ''?'' <> ''master'' AND ''?'' <> ''model'' AND ''?'' <> ''msdb'' AND ''?'' <> ''tempdb''
BEGIN   
exec sp_change_users_login ''Auto_Fix'', '''+ @name +'''
END'

EXEC master..sp_MSForeachdb @query

    FETCH NEXT FROM cur into @name

END

CLOSE cur
DEALLOCATE cur

doufám, že to pomůže

3

Níže je uveden jednoduchý skript, který dokonale vykonává tuto práci -

USE DBNAME     ----- change db name for which you waant to fix Orphan users issue

GO


declare @name varchar(150)

DECLARE cur CURSOR FOR
    select name from master..syslogins

Open cur

FETCH NEXT FROM cur into @name

WHILE @@FETCH_STATUS = 0
BEGIN

    EXEC sp_change_users_login 'AUTO_FIX', @name

    FETCH NEXT FROM cur into @name

END

CLOSE cur
DEALLOCATE cur
2
Devshish

To by byl skvělý případ použití příkazu dbatools Repair-DbaDbOrphanUser

Nejprve můžete identifikovat osiřelé uživatele

Get-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User

a poté je vyřešíte pomocí

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User
Status       : Success
0
SQLDBAWithABeard