Чи є скорочений спосіб "Автоматично виправити" всіх осиротілих користувачів у базі даних SQL Server 2008 R2?


16

Досить прямо вгору зафіксувати одного осиротелого користувача SQL до входу за допомогою:

EXEC sp_change_users_login 'Auto_Fix', 'user'

Я міг би зробити це сценарієм, але чи існує існуюча збережена процедура, яка автоматично намагається виправити кожного осиротілого користувача в певній базі даних?

Відповіді:


15

Тед Крюгер ( @onpnt на Twitter) написав чудовий сценарій, який робить це. Він додає реєстрації для будь-якого користувача без входу та запускає auto_fix. Він навіть написав те, що включає виправлення входів у Windows:

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

Звичайно, якщо ви хочете спробувати його спочатку (або просто виконати аудит), ви можете прокоментувати рядки дій ( EXEC) та просто роздрукувати результати.


2

Нижче представлений простий сценарій, який виконує цю роботу ідеально -

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

На основі вищезазначеного сценарію, ми можемо виправити всіх користувачів в екземплярі, використовуючи sp_MSForeachdb, як це

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

сподіваюся, що це допоможе


добре, я можу пояснити, що так: 1 вибирайте кожен логін у систематинах, 2 користувачі перемальовуйте карту (область - рівень бази даних) та логін (область - це екземпляр) для кожної бази даних
Phú Nguyễn Dương

0

Це було б чудовим випадком використання команди dbatools Repair-DbaDbOrphanUser

Спочатку ви можете визначити користувачів-сиріт

Get-DbaDbOrphanUser -SqlInstance $sqlinstance

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

а потім вирішити їх

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User
Status       : Success
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.