あるインスタンスから別のインスタンスにデータベースを復元するとき、SQL Serverログインをデータベースユーザーに再リンクする必要がある場合があります。
これは通常、次のいずれかの手順で実行されます。
use <database>
go
sp_change_users_login 'Update_one', '<datbase_user>', '<sql server login>'
go
use <database>
go
ALTER USER [<datbase_user>] WITH LOGIN = [<sql server login>]
go
これらのコマンドは、孤立したデータベースユーザーを対応するSQL Serverログインに再リンクします。
SQL Serverログインまたはデータベースユーザーを削除せずにこの関係を解除することはできますか?
sys.database_principals
およびsys.server_principals
DMV、ただし変更はできません。
これは、一時的なログインを作成し、ユーザーを一時的なログインに再マップして、一時的なログインを削除するという、遠回りの方法で実現できます。 SQLログインの場合:
USE [master]
CREATE LOGIN [temp_user] WITH PASSWORD=N'asdf' MUST_CHANGE,
DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
ALTER LOGIN [temp_user] DISABLE
USE [test_database]
ALTER USER test_user WITH LOGIN = [temp_user]
DROP LOGIN [temp_user]
Windows認証ログイン/ユーザーの場合、一時的なWindowsアカウントを作成してから削除する必要があるため、100%T-SQLソリューションではありません。
-- Create a Windows account with a name of Temp_User
USE [master]
CREATE LOGIN [COMPUTERNAME\Temp_User] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
ALTER LOGIN [COMPUTERNAME\Temp_User] DISABLE
USE [test]
ALTER USER [COMPUTERNAME\Existing_User] WITH LOGIN = [COMPUTERNAME\Temp_User]
--Delete the Temp_User Windows account
Tonyの答えは最初はかなり近いものでしたが、ネイティブSQL Serverログインでのみ機能し、Windows Authenticated SQL Serverログインでは機能しませんでした。ただし、一般的な考え方は同じです。
ローカルサーバーにWindowsアカウントを作成します。
C:\> Net User <account> /ADD
Windows認証済みのSQL Serverログインを作成します。
USE [master]
GO
CREATE LOGIN [<server>\<account>] FROM WINDOWS WITH DEFAULT_DATABASE = [master]
GO
問題のデータベースに切り替え、Windows Authenticated SQL Serverログインを目的のデータベースユーザーにリンクします。
注意:この手順では、現在使用しているデータベースの
[<database_user>]
の名前をWindowsの認証済みSQL Serverログイン名[<server>\<account>]
に変更します。名前を書き留めて、名前を元に戻すことができるようにします。
USE [<database>]
GO
ALTER USER [<database_user>] WITH LOGIN = [<server>\<account>]
GO
以前に作成したWindows認証SQL Serverログインを削除します。
USE [master]
GO
DROP LOGIN [<servername>\<account>]
GO
手順3で名前を変更したデータベースユーザーの名前を以前の名前に変更します。
USE [<database>]
GO
ALTER USER [<servername>\<account>] WITH NAME = [<database_user>]
GO
この目的で作成されたローカルアカウントを削除します。
C:\> Net User <account> /DELETE
これらの手順を実行した後、[<database_user>]
はWindows認証のSQL Serverログインにリンクされなくなります。
ご注意ください
このソリューションには、1つの大きな注意点があります。 Windows認証済みSQL ServerログインをSQL Serverから実際に削除できず、新しいローカル<account>
を作成して再マップして削除する必要がある場合は、データベースユーザーのSIDがデータベースで変更され、操作。