it-swarm.asia

Apakah ada cara singkat untuk 'Auto_Fix' semua Pengguna yatim di database SQL Server 2008 R2?

Cukup mudah untuk memperbaiki satu pengguna SQL yatim piatu ke login menggunakan:

EXEC sp_change_users_login 'Auto_Fix', 'pengguna'

Saya bisa membuat skrip ini, tetapi apakah ada prosedur tersimpan yang ada yang secara otomatis mencoba untuk memperbaiki setiap pengguna yatim dalam database yang diberikan?

16

Ted Krueger ( @ onpnt di Twitter) menulis skrip hebat yang melakukan ini. Itu menambahkan login untuk setiap pengguna tanpa login dan menjalankan perbaikan otomatis. Dia bahkan menulis satu yang termasuk memperbaiki login Windows:

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

Tentu saja jika Anda ingin mengujinya terlebih dahulu (atau hanya melakukan audit) Anda dapat mengomentari garis tindakan (EXEC) dan hanya mencetak hasilnya.

15
Aaron Bertrand

berdasarkan skrip di atas, kita dapat memperbaiki semua pengguna secara instan dengan menggunakan sp_MSForeachdb seperti ini

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

semoga ini bisa membantu

3

Di bawah ini adalah skrip sederhana yang melakukan pekerjaan dengan sempurna -

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

Ini akan menjadi kasus penggunaan yang bagus untuk menggunakan perintah dbatools Repair-DbaDbOrphanUser

Pertama, Anda dapat mengidentifikasi Pengguna yatim

Get-DbaDbOrphanUser -SqlInstance $sqlinstance

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

dan kemudian mengatasinya dengan

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

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