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


16

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?

Jawaban:


15

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.


2

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

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


baik, saya dapat menjelaskan bahwa seperti ini: 1 mengambil setiap login di syslogins, 2 memetakan kembali pengguna (cakupan adalah tingkat basis data) dan masuk (lingkup adalah tingkat contoh) untuk setiap basis data
Phú Nguyễn Dương

0

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.