sp_change_users_login (Transact-SQL)
適用対象: SQL Server
既存のデータベース ユーザーを SQL Server ログインにマップします。
重要
この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに ALTER USER を使用してください。
構文
sp_change_users_login
[ @Action = ] 'Action'
[ , [ @UserNamePattern = ] N'UserNamePattern' ]
[ , [ @LoginName = ] N'LoginName' ]
[ , [ @Password = ] N'Password' ]
[ ; ]
引数
[ @Action = ] 'Action'
ストアド プロシージャが実行するアクションについて説明します。 @Action は既定値なしで varchar(10)であり、次のいずれかの値を持つことができます。
Value | 説明 |
---|---|
Auto_Fix |
現在のデータベースの sys.database_principals システム カタログ ビューのユーザー エントリを、同じ名前の SQL Server ログインにリンクします。 同じ名前のログインが存在しない場合は、ログインが作成されます。 Auto_Fix ステートメントの結果を調べて、正しいリンクが実際に作成されていることを確認します。 セキュリティに依存する状況では、 Auto_Fix を使用しないでください。Auto_Fix を使用する場合は、ログインがまだ存在しない場合は@UserNamePatternと@Passwordを指定する必要があります。それ以外の場合は@UserNamePatternを指定する必要がありますが、@Passwordは無視されます。 @LoginName は NULL する必要があります。 @UserNamePattern は、現在のデータベース内の有効なユーザーである必要があります。 ログインに別のユーザーをマップすることはできません。 |
Report |
ログインにリンクされていない現在のデータベース内のユーザーと対応するセキュリティ識別子 (SID) を一覧表示します。 @UserNamePattern、 @LoginName、および @Password を NULL するか、指定しない必要があります。レポート オプションをシステム テーブルを使用したクエリに置き換えるには、 sys.server_prinicpals のエントリを sys.database_principals のエントリと比較します。 |
Update_One |
現在のデータベース内の指定した @UserNamePattern を既存の SQL Server @LoginNameにリンクします。 @UserNamePattern と @LoginName を指定する必要があります。 @Password は NULL するか、指定しない必要があります。 |
[ @UserNamePattern = ] N'UserNamePattern'
現在のデータベース内のユーザーの名前。 @UserNamePattern は sysname で、既定値は NULL
です。
[ @LoginName = ] N'LoginName'
SQL Server ログインの名前。 @LoginName は sysname で、既定値は NULL
です。
[ @Password = ] N'Password'
Auto_Fix
を指定して作成される新しい SQL Server ログインに割り当てられたパスワード。 @Password は sysname であり、 NULL
することはできません。 一致するログインが既に存在する場合、ユーザーとログインはマップされ、 @Password は無視されます。 一致するログインが存在しない場合、 sp_change_users_login
は新しい SQL Server ログインを作成し、新しいログインのパスワードとして @Password を割り当てます。
重要
リターン コードの値
0
(成功) または 1
(失敗)。
結果セット
列名 | データ型 | 説明 |
---|---|---|
UserName |
sysname | データベース ユーザー名。 |
UserSID |
varbinary(85) | ユーザーのセキュリティ識別子。 |
解説
sp_change_users_login
を使用して、現在のデータベース内のデータベース ユーザーを SQL Server ログインにリンクします。 ユーザーのログインが変更された場合は、 sp_change_users_login
を使用して、ユーザーのアクセス許可を失うことなく、ユーザーを新しいログインにリンクします。 新しい @LoginName を sa
することはできません。また、 @UserNamePattern を dbo
、 guest
、または INFORMATION_SCHEMA
ユーザーにすることはできません。
sp_change_users_login
は、データベース ユーザーを Windows レベルのプリンシパル、証明書、または非対称キーにマップするために使用できません。
sp_change_users_login
は、Windows プリンシパルから作成された SQL Server ログインや、 CREATE USER WITHOUT LOGIN
を使用して作成されたユーザーでは使用できません。
sp_change_users_login
は、ユーザー定義トランザクション内では実行できません。
アクセス許可
db_owner 固定データベース ロール内でメンバーシップが必要です。 sysadmin固定サーバー ロールのメンバーのみが、Auto_Fix
オプションを指定できます。
例
この記事の Transact-SQL コード サンプルは AdventureWorks2022
または AdventureWorksDW2022
サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。
A. ログイン マッピングへの現在のユーザーのレポートを表示する
次の例では、現在のデータベース内のユーザーと各ユーザーのセキュリティ識別子 (SID) を示すレポートを作成します。
EXEC sp_change_users_login 'Report';
B. データベース ユーザーを新しい SQL Server ログインにマップする
次の例では、データベース ユーザーが新しい SQL Server ログインに関連付けられています。 データベース ユーザー MB-Sales
は、最初は別のログインにマップされ、ログイン MaryB
に再マップされます。
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C: ユーザーをログインに自動的にマップし、必要に応じて新しいログインを作成する
次の例は、Auto_Fix
を使用して既存のユーザーを同じ名前のログインにマップする方法、またはログインMary
が存在しない場合にB3r12-3x$098f6
パスワードである SQL Server ログイン Mary
を作成する方法を示しています。
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO