Có cách viết tắt nào để 'Auto_Fix' tất cả Người dùng mồ côi trong cơ sở dữ liệu SQL Server 2008 R2 không?


16

Khá đơn giản để sửa một người dùng SQL mồ côi thành một đăng nhập bằng cách sử dụng:

EXEC sp_change_usftimelogin 'Auto_Fix', 'user'

Tôi có thể viết kịch bản này, nhưng có một quy trình được lưu trữ hiện có tự động cố gắng sửa chữa mọi người dùng mồ côi trong một cơ sở dữ liệu nhất định không?

Câu trả lời:


15

Ted Krueger ( @onpnt trên twitter) đã viết một kịch bản tuyệt vời thực hiện điều này. Nó thêm thông tin đăng nhập cho bất kỳ người dùng nào mà không cần đăng nhập và chạy auto_fix. Ông thậm chí đã viết một cái bao gồm sửa lỗi đăng nhập Windows:

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

Tất nhiên, nếu bạn muốn kiểm tra nó trước (hoặc chỉ thực hiện kiểm toán), bạn có thể nhận xét các dòng hành động ( EXEC) và chỉ cần in ra kết quả.


2

Dưới đây là kịch bản đơn giản thực hiện công việc một cách hoàn hảo -

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

dựa trên tập lệnh trên, chúng ta có thể sửa tất cả người dùng bằng cách sử dụng sp_MSForeachdb như thế này

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

hy vọng nó sẽ giúp


tốt, tôi có thể giải thích như thế này: 1 tìm nạp mỗi lần đăng nhập trong syslogins, 2 người dùng ánh xạ lại (phạm vi là cấp độ cơ sở dữ liệu) và đăng nhập (phạm vi là cấp độ thể hiện) cho mỗi cơ sở dữ liệu
Phú Nguyễn Dương

0

Đây sẽ là một trường hợp sử dụng tuyệt vời để sử dụng lệnh dbatools Repair-DbaDbOrphanUser

Trước tiên, bạn có thể xác định Người dùng mồ côi

Get-DbaDbOrphanUser -SqlInstance $sqlinstance

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

và sau đó giải quyết chúng với

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User
Status       : Success
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.