以下を使用して、孤立した単一のSQLユーザーをログインに修正するのはかなり簡単です。
EXEC sp_change_users_login 'Auto_Fix'、 'user'
これをスクリプト化することはできますが、特定のデータベース内のすべての孤立ユーザーを自動的に修正しようとする既存のストアドプロシージャはありますか
以下を使用して、孤立した単一のSQLユーザーをログインに修正するのはかなり簡単です。
EXEC sp_change_users_login 'Auto_Fix'、 'user'
これをスクリプト化することはできますが、特定のデータベース内のすべての孤立ユーザーを自動的に修正しようとする既存のストアドプロシージャはありますか
回答:
Ted Krueger(Twitterの@onpnt)は、これを行う素晴らしいスクリプトを作成しました。ログインのないすべてのユーザーのログインを追加し、auto_fixを実行します。彼は、Windowsログインの修正を含むものも書きました。
http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing-orphaned-database-users
もちろん、最初にテストする(または単に監査を実行する)場合は、アクション行(EXEC
)をコメントアウトして、結果を出力するだけです。
以下は、仕事を完璧に行う簡単なスクリプトです。
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
上記のスクリプトに基づいて、次のように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
それが役立つことを願って
これは、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