it-swarm.asia

هل هناك طريقة مختصرة لـ "Auto_Fix" لجميع الأيتام في قاعدة بيانات SQL Server 2008 R2؟

من السهل جدًا إصلاح مستخدم SQL المعزول لتسجيل الدخول باستخدام:

EXEC sp_change_users_login "Auto_Fix" ، "user"

يمكنني كتابة هذا ، ولكن هل يوجد إجراء مخزن موجود يحاول تلقائيًا إصلاح كل مستخدم يتيم في قاعدة بيانات معينة؟

16
Daniel James Bryars

كتب Ted Krueger ( @ onpnt على Twitter) نصًا رائعًا يقوم بذلك. يضيف تسجيلات الدخول لأي مستخدم بدون تسجيل دخول ويقوم بتشغيل الإصلاح التلقائي. حتى أنه كتب واحدًا يتضمن إصلاح تسجيلات دخول Windows:

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

بالطبع إذا كنت ترغب في اختباره أولاً (أو مجرد إجراء مراجعة) ، يمكنك التعليق على سطور الإجراءات (EXEC) وطباعة النتائج فقط.

15
Aaron Bertrand

استنادًا إلى النص أعلاه ، يمكننا إصلاح جميع المستخدمين في مثيل باستخدام 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

آمل أن يساعد

3
Phú Nguyễn Dương

فيما يلي نص بسيط يقوم بالمهمة بشكل مثالي -

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

سيكون هذا حالة استخدام رائعة لاستخدام الأمر 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
0
SQLDBAWithABeard