SQL Server 2008 R2 डेटाबेस में सभी अनाथ उपयोगकर्ताओं को 'Auto_Fix' करने के लिए एक शॉर्टहैंड तरीका है?


16

एक एकल अनाथ SQL उपयोगकर्ता को एक लॉगिन का उपयोग करके ठीक करने के लिए यह काफी सीधा है:

EXEC sp_change_users_login 'Auto_Fix', 'उपयोगकर्ता'

मैं इसे स्क्रिप्ट कर सकता हूं, लेकिन क्या कोई मौजूदा संग्रहीत प्रक्रिया है जो किसी दिए गए डेटाबेस में प्रत्येक अनाथ उपयोगकर्ता को ठीक करने की कोशिश करती है?

जवाबों:


15

टेड क्रुएगर ( ट्विटर पर @onpnt ) ने एक बेहतरीन स्क्रिप्ट लिखी जो ऐसा करती है। यह बिना लॉगिन के किसी भी उपयोगकर्ता के लिए लॉगिन जोड़ता है और ऑटो_फिक्स चलाता है। उन्होंने यह भी लिखा है कि विंडोज लॉगिन फिक्सिंग भी शामिल है:

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 syslogins में प्रत्येक लॉगिन प्राप्त करें, प्रत्येक डेटाबेस के लिए 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.