Bir SQL Server 2008 R2 veritabanındaki tüm Artık Kullanıcıları 'Otomatik_Değiştir' için bir kısayol yolu var mı?


16

Tek bir yetim SQL kullanıcısını kullanarak giriş yapmak için oldukça basittir:

EXEC sp_change_users_login 'Auto_Fix', 'kullanıcı'

Bu komut dosyası olabilir, ancak belirli bir veritabanındaki her yetim kullanıcı otomatik olarak düzeltmeye çalışan varolan bir saklı yordam var mı?

Yanıtlar:


15

Ted Krueger ( @ onpnt on twitter) bunu yapan harika bir senaryo yazdı. Oturum açmadan herhangi bir kullanıcı için oturum açma bilgileri ekler ve auto_fix'i çalıştırır. Hatta Windows oturum açmalarını düzeltmeyi içeren bir tane yazdı:

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

Elbette ilk önce test etmek (veya sadece bir denetim yapmak) istiyorsanız, eylem çizgilerini ( EXEC) yorumlayabilir ve sadece sonuçları yazdırabilirsiniz.


2

Aşağıda işi mükemmel yapan basit komut dosyası verilmiştir -

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

yukarıdaki komut dosyasına dayanarak, sp_MSForeachdb kullanarak böyle bir durumda tüm kullanıcıyı düzeltebiliriz

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

umarım yardımcı olur


iyi, ben şöyle açıklayabilir: 1 syslogins her giriş getir, 2 yeniden harita kullanıcı (kapsam veritabanı düzeyidir) ve giriş (kapsam örnek düzeyidir) her veritabanı için
Phú Nguyễn Dương

0

Repair-DbaDbOrphanUser dbatools komutunu kullanmak için bu harika bir kullanım

İlk önce Yetim Kullanıcıları belirleyebilirsiniz

Get-DbaDbOrphanUser -SqlInstance $sqlinstance

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

ve sonra bunları

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User
Status       : Success
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.