มีวิธีย่อ 'Auto_Fix' ผู้ใช้กำพร้าทั้งหมดในฐานข้อมูล SQL Server 2008 R2 หรือไม่


16

ตรงไปตรงมาเพื่อแก้ไขผู้ใช้ SQL กำพร้าคนเดียวเพื่อเข้าสู่ระบบโดยใช้:

EXEC sp_change_users_login 'Auto_Fix', 'ผู้ใช้'

ฉันสามารถเขียนสคริปต์นี้ได้ แต่มีกระบวนการจัดเก็บที่มีอยู่ซึ่งพยายามแก้ไขผู้ใช้ที่ไม่ได้ใช้งานทุกคนในฐานข้อมูลที่กำหนดโดยอัตโนมัติหรือไม่

คำตอบ:


15

Ted Krueger ( @onpnt on twitter) เขียนสคริปต์ยอดเยี่ยมที่ทำสิ่งนี้ มันเพิ่มการเข้าสู่ระบบสำหรับผู้ใช้โดยไม่ต้องเข้าสู่ระบบและเรียกใช้ auto_fix เขายังเขียนหนึ่งที่มีการแก้ไขการเข้าสู่ระบบ Windows:

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ễnDươ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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.