web-dev-qa-db-fra.com

Existe-t-il un raccourci pour «Auto_Fix» tous les utilisateurs orphelins dans une base de données SQL Server 2008 R2?

Il est assez simple de fixer un seul utilisateur SQL orphelin à une connexion en utilisant:

EXEC sp_change_users_login 'Auto_Fix', 'utilisateur'

Je pourrais écrire ceci, mais existe-t-il une procédure stockée existante qui essaie automatiquement de réparer chaque utilisateur orphelin dans une base de données donnée?

16
Daniel James Bryars

Ted Krueger ( @ onpnt sur Twitter) a écrit un excellent script qui fait cela. Il ajoute des connexions pour tout utilisateur sans connexion et exécute le auto_fix. Il en a même écrit un qui comprend la correction des connexions Windows:

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

Bien sûr, si vous voulez le tester d'abord (ou simplement effectuer un audit), vous pouvez commenter les lignes d'action (EXEC) et simplement imprimer les résultats.

15
Aaron Bertrand

sur la base du script ci-dessus, nous pouvons corriger tous les utilisateurs d'une instance en utilisant sp_MSForeachdb comme ceci

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

j'espère que ça va aider

3

Voici le script simple qui fait parfaitement le travail -

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

Ce serait un excellent cas d'utilisation pour utiliser la commande dbatools Repair-DbaDbOrphanUser

Vous pouvez d'abord identifier les utilisateurs orphelins

Get-DbaDbOrphanUser -SqlInstance $sqlinstance

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

puis les résoudre avec

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

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