ALTER USER (Transact-SQL)
データベース ユーザーの名前、またはデータベースの既定のスキーマを変更します。
Note
Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。
製品を選択する
次の行で、興味のある製品の名前を選択すると、その製品の情報のみが表示されます。
* SQL Server *
SQL Server
構文
-- Syntax for SQL Server
ALTER USER userName
WITH <set_item> [ ,...n ]
[;]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
| DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
引数
userName: データベース内でユーザーを識別する名前を指定します。
LOGIN =loginName: ユーザーのセキュリティ識別子 (SID) を別のログインの SID に一致するように変更することで、ユーザーを別のログインに再マッピングします。
NAME =newUserName: このユーザーの新しい名前を指定します。 newUserName は現在のデータベースに存在しない名前にする必要があります。
DEFAULT_SCHEMA = { schemaName | NULL } このユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマを指定します。 既定のスキーマを NULL に設定すると、既定のスキーマが Windows グループから削除されます。 Windows ユーザーでは NULL オプションは使用できません。
PASSWORD = 'password' 適用対象: SQL Server 2012 (11.x) 以降、SQL Database.
変更するユーザーのパスワードを指定します。 パスワードでは大文字と小文字が区別されます。
Note
このオプションは、包含ユーザーに対してのみ使用できます。 詳しくは、「包含データベース」および「sp_migrate_user_to_contained (Transact-SQL)」をご覧ください。
OLD_PASSWORD ='oldpassword'適用対象: SQL Server 2012 (11.x) 以降、SQL Database.
'password' で置き換える現在のユーザー パスワードです。 パスワードでは大文字と小文字が区別されます。 ALTER ANY USER 権限がない場合、パスワードを変更するには、OLD_PASSWORD が必要です。 OLD_PASSWORD を必須にすることで、IMPERSONATION 権限を持つユーザーによるパスワードの変更を防止できます。
Note
このオプションは、包含ユーザーに対してのみ使用できます。
DEFAULT_LANGUAGE ={ NONE | <lcid> | <language name> | <language alias> }適用対象: SQL Server 2012 (11.x) 以降。
ユーザーに割り当てる既定の言語を指定します。 このオプションを NONE に設定した場合、既定の言語はデータベースの現在の既定の言語に設定されます。 データベースの既定の言語が将来変更されても、ユーザーの既定の言語は変更されません。 DEFAULT_LANGUAGE には、ローカル ID (LCID)、言語の名前、または言語の別名を指定できます。
Note
このオプションは包含データベースでのみ指定でき、また、包含ユーザーに対してのみ指定できます。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] 適用対象: SQL Server 2016 (13.x) 以降、SQL Database.
一括コピー操作でのサーバーの暗号化メタデータ チェックを抑制します。 これによりユーザーは、データを暗号化解除することなく、テーブルまたはデータベース間で暗号化データを一括コピーできます。 既定値は OFF です。
警告
このオプションを不適切に使用すると、データが破損する場合があります。 詳細については、「Always Encrypted で保護された機微なデータの移行」を参照してください。
解説
既定のスキーマは、このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマになります。 特に指定しない限り、このデータベース ユーザーによって作成されたオブジェクトの所有者になるのは、既定のスキーマです。
ユーザーに既定のスキーマが指定されている場合は、その既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが所属しているグループに既定のスキーマが指定されている場合は、グループの既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが複数のグループに所属している場合、そのユーザーの既定のスキーマは、最も小さい principle_id と明示的に設定された既定のスキーマを持つ Windows グループのスキーマになります。 ユーザーに対する既定のスキーマを決定できない場合は、dbo スキーマが使用されます。
DEFAULT_SCHEMA には、現在データベースに存在しないスキーマも設定できます。 したがって、スキーマが作成される前に DEFAULT_SCHEMA をユーザーに割り当てることができます。
証明書または非対称キーにマップされているユーザーに対して、DEFAULT_SCHEMA を指定することはできません。
重要
ユーザーが固定サーバー ロール sysadmin のメンバーである場合、DEFAULT_SCHEMA の値は無視されます。 固定サーバー ロール sysadmin のすべてのメンバーには、dbo
の既定のスキーマが割り当てられます。
Windows のログインまたはグループにマップされているユーザーの名前を変更できるのは、新しいユーザー名の SID とデータベースに記録されている SID が一致する場合だけです。 この条件により、データベースにおける Windows ログインのなりすましを防止できます。
WITH LOGIN 句を使用すると、ユーザーを別のログインに再マップできます。 ログインのないユーザー、証明書にマップされているユーザー、非対称キーにマップされているユーザーを、この句を使って再マップすることはできません。 SQL ユーザーおよび Windows ユーザー (またはグループ) のみ再マップできます。 WITH LOGIN 句は、Windows アカウントを SQL Server ログインに変更するなど、ユーザーの種類の変更には使用できません。
SID の不一致は別のサーバーからデータベースを復元し、データベース ユーザーを SQL Server ログインにマップした場合に発生することがあります。 WITH LOGIN 句を使用して、データベース内のユーザー SID をサーバーのログイン SID に置き換えることで、この状況を改善できます。
次の条件を満たす場合、ユーザーの名前はログイン名に自動的に変更されます。
ユーザーが Windows ユーザーである。
名前が Windows 名である (円記号を含む)。
新しい名前が指定されていない。
現在の名前がログイン名とは異なる。
そうでない場合は、呼び出し元が NAME 句を追加で呼び出さない限り、ユーザーの名前は変更されません。
SQL Server のログイン、証明書、非対称キーにマップされているユーザーの名前には、円記号 (\) を含めることはできません。
注意事項
SQL Server 2005 からスキーマの動作が変更されました。 その結果、スキーマがデータベース ユーザーと同じであると想定しているコードでは、正しい結果が返されない場合があります。 CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION のいずれかの DDL ステートメントが使用されたことのあるデータベースでは、sysobjects などの古いカタログ ビューを使用しないでください。 そのようなデータベースでは、代わりに新しいカタログ ビューを使用してください。 新しいカタログ ビューでは、SQL Server 2005 で導入されたプリンシパルとスキーマの分離が考慮されます。 カタログ ビューの詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。
セキュリティ
Note
ALTER ANY USER 権限を持つユーザーは、任意のユーザーの既定のスキーマを変更できます。 変更されたスキーマを所有するユーザーは、知らずに間違ったテーブルからデータを選択したり、間違ったスキーマからコードを実行する可能性があります。
アクセス許可
ユーザーの名前を変更するには、ALTER ANY USER 権限が必要です。
ターゲットを変更するには、ユーザーのログインにデータベースの CONTROL 権限が必要です。
データベースに対する CONTROL 権限を持つユーザーのユーザー名を変更するには、データベースに対する CONTROL 権限が必要です。
既定のスキーマまたは言語を変更するには、ユーザーに対する ALTER 権限が必要です。 ユーザーは自分が所有する既定のスキーマまたは言語を変更できます。
例
すべての例は、ユーザー データベースで実行されます。
A. データベース ユーザーの名前を変更する
次の例では、データベース ユーザー Mary5
の名前を Mary51
に変更します。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. ユーザーの既定のスキーマを変更する
次の例では、ユーザー Mary51
の既定のスキーマを Purchasing
に変更します。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
C. 複数のオプションを一度に変更する
次の例では、包含データベース ユーザーに対する複数のオプションを 1 つのステートメントで変更します。
適用対象: SQL Server 2012 (11.x) 以降。
ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per'
, DEFAULT_LANGUAGE= French ;
GO
D. SID の不一致を修正する
次の例では、SQL Server 認証のログインでサーバー上の SID と一致するように、データベースのユーザー SID を修正しています。
ALTER USER Mai
WITH LOGIN = Mai;
GO
関連項目
* Fabric での Azure SQL Database と SQL Database *
Microsoft Fabric の Azure SQL Database と SQL データベース
構文
Azure SQL Database の構文
-- Syntax for Azure SQL Database
ALTER USER userName
WITH <set_item> [ ,...n ]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = schemaName
| LOGIN = loginName
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
[;]
-- Azure SQL Database Update Syntax
ALTER USER userName
WITH <set_item> [ ,...n ]
[;]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
-- SQL Database syntax when connected to a federation member
ALTER USER userName
WITH <set_item> [ ,... n ]
[;]
<set_item> ::=
NAME = newUserName
Microsoft Fabric の SQL データベースの構文
ALTER USER
{
Microsoft_Entra_principal FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid']
}
[ ; ]
-- Users that cannot authenticate
ALTER USER user_name
{
{ FOR | FROM } CERTIFICATE cert_name
| { FOR | FROM } ASYMMETRIC KEY asym_key_name
}
[ ; ]
<options_list> ::=
DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
-- SQL Database syntax when connected to a federation member
ALTER USER user_name
[;]
引数
userName
データベース内でユーザーを識別する名前を指定します。
LOGIN =loginName
ユーザーのセキュリティ識別子 (SID) を別のログインの SID に一致するように変更することで、ユーザーを別のログインに再マップします。
ALTER USER ステートメントが SQL のバッチ内の唯一のステートメントである場合、Azure SQL Database では WITH LOGIN 句がサポートされます。 ALTER USER ステートメントが SQL バッチ内の唯一のステートメントではない場合、または動的 SQL で実行されている場合、WITH LOGIN 句はサポートされません。
NAME =newUserName
このユーザーの新しい名前を指定します。 newUserName は現在のデータベースに存在しない名前にする必要があります。
DEFAULT_SCHEMA = { schemaName | NULL }
このユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマを指定します。 既定のスキーマを NULL に設定すると、既定のスキーマが Windows グループから削除されます。 Windows ユーザーでは、NULL オプションは使用できません。
PASSWORD = 'password'
適用対象: SQL Database。
変更するユーザーのパスワードを指定します。 パスワードでは大文字と小文字が区別されます。
Note
このオプションは、包含ユーザーに対してのみ使用できます。 詳しくは、「包含データベース」および「sp_migrate_user_to_contained (Transact-SQL)」をご覧ください。
OLD_PASSWORD ='oldpassword'
適用対象: SQL Database。
'password' で置き換える現在のユーザー パスワードです。 パスワードでは大文字と小文字が区別されます。 ALTER ANY USER 権限がない場合、パスワードを変更するには、OLD_PASSWORD が必要です。 OLD_PASSWORD を必須にすることで、IMPERSONATION 権限を持つユーザーによるパスワードの変更を防止できます。
Note
このオプションは、包含ユーザーに対してのみ使用できます。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
適用対象: SQL Server 2016 (13.x) 以降、SQL Database。
一括コピー操作でのサーバーの暗号化メタデータ チェックを抑制します。 これによりユーザーは、データを暗号化解除することなく、テーブルまたはデータベース間で暗号化データを一括コピーできます。 既定値は OFF です。
警告
このオプションを不適切に使用すると、データが破損する場合があります。 詳細については、「Always Encrypted で保護された機微なデータの移行」を参照してください。
解説
既定のスキーマは、このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマになります。 特に指定しない限り、このデータベース ユーザーによって作成されたオブジェクトの所有者になるのは、既定のスキーマです。
ユーザーに既定のスキーマが設定されている場合は、その既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが所属しているグループに既定のスキーマが指定されている場合は、グループの既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが複数のグループに所属している場合、そのユーザーの既定のスキーマは、最も小さい principle_id と明示的に設定された既定のスキーマを持つ Windows グループのスキーマになります。 ユーザーに対する既定のスキーマを決定できない場合は、dbo スキーマが使用されます。
DEFAULT_SCHEMA には、現在データベースに存在しないスキーマも設定できます。 したがって、スキーマが作成される前に DEFAULT_SCHEMA をユーザーに割り当てることができます。
証明書または非対称キーにマップされているユーザーに対して、DEFAULT_SCHEMA を指定することはできません。
重要
ユーザーが固定サーバー ロール sysadmin のメンバーである場合、DEFAULT_SCHEMA の値は無視されます。 固定サーバー ロール sysadmin のすべてのメンバーには、dbo
の既定のスキーマが割り当てられます。
Windows のログインまたはグループにマップされているユーザーの名前を変更できるのは、新しいユーザー名の SID とデータベースに記録されている SID が一致する場合だけです。 この条件により、データベースにおける Windows ログインのなりすましを防止できます。
WITH LOGIN 句を使用すると、ユーザーを別のログインに再マップできます。 ログインのないユーザー、証明書にマップされているユーザー、非対称キーにマップされているユーザーを、この句を使って再マップすることはできません。 SQL ユーザーおよび Windows ユーザー (またはグループ) のみ再マップできます。 WITH LOGIN 句は、Windows アカウントを SQL Server ログインに変更するなど、ユーザーの種類の変更には使用できません。
次の条件を満たす場合、ユーザーの名前はログイン名に自動的に変更されます。
ユーザーが Windows ユーザーである。
名前が Windows 名である (円記号を含む)。
新しい名前が指定されていない。
現在の名前がログイン名とは異なる。
そうでない場合は、呼び出し元が NAME 句を追加で呼び出さない限り、ユーザーの名前は変更されません。
SQL Server のログイン、証明書、非対称キーにマップされているユーザーの名前には、円記号 (\) を含めることはできません。
注意事項
SQL Server 2005 からスキーマの動作が変更されました。 その結果、スキーマがデータベース ユーザーと同じであると想定しているコードでは、正しい結果が返されない場合があります。 CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION のいずれかの DDL ステートメントが使用されたことのあるデータベースでは、sysobjects などの古いカタログ ビューを使用しないでください。 そのようなデータベースでは、代わりに新しいカタログ ビューを使用してください。 新しいカタログ ビューでは、SQL Server 2005 で導入されたプリンシパルとスキーマの分離が考慮されます。 カタログ ビューの詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。
セキュリティ
Note
ALTER ANY USER 権限を持つユーザーは、任意のユーザーの既定のスキーマを変更できます。 変更されたスキーマを所有するユーザーは、知らずに間違ったテーブルからデータを選択したり、間違ったスキーマからコードを実行する可能性があります。
アクセス許可
ユーザーの名前を変更するには、ALTER ANY USER 権限が必要です。
ターゲットを変更するには、ユーザーのログインにデータベースの CONTROL 権限が必要です。
データベースに対する CONTROL 権限を持つユーザーのユーザー名を変更するには、データベースに対する CONTROL 権限が必要です。
既定のスキーマまたは言語を変更するには、ユーザーに対する ALTER 権限が必要です。 ユーザーは自分が所有する既定のスキーマまたは言語を変更できます。
例
すべての例は、ユーザー データベースで実行されます。
A. データベース ユーザーの名前を変更する
次の例では、データベース ユーザー Mary5
の名前を Mary51
に変更します。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. ユーザーの既定のスキーマを変更する
次の例では、ユーザー Mary51
の既定のスキーマを Purchasing
に変更します。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
C. 複数のオプションを一度に変更する
次の例では、包含データベース ユーザーに対する複数のオプションを 1 つのステートメントで変更します。
ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per';
GO
関連項目
* SQL Managed Instance *
Azure SQL Managed Instance
構文
重要
Microsoft Entra ログインを使用してユーザーに適用する場合、Azure SQL Managed Instance では次のオプションのみがサポートされます。 DEFAULT_SCHEMA = { schemaName | NULL }
と DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
Azure SQL Managed Instance に移行されたデータベース内のユーザーの再マップに役立つ新しい構文拡張機能が追加されました。 ALTER USER 構文は、Microsoft Entra ID を使用してフェデレーションおよび同期されたドメイン内のデータベース ユーザーを Microsoft Entra ログインにマップするのに役立ちます。
-- Syntax for SQL Managed Instance
ALTER USER userName
{ WITH <set_item> [ ,...n ] | FROM EXTERNAL PROVIDER }
[;]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
| DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
-- Users or groups that are migrated as federated and synchronized with Azure AD have the following syntax:
/** Applies to Windows users that were migrated and have the following user names:
- Windows user <domain\user>
- Windows group <domain\MyWindowsGroup>
- Windows alias <MyWindowsAlias>
**/
ALTER USER userName
{ WITH <set_item> [ ,...n ] | FROM EXTERNAL PROVIDER }
[;]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
引数
userName: データベース内でユーザーを識別する名前を指定します。
LOGIN =loginName: ユーザーのセキュリティ識別子 (SID) を別のログインの SID に一致するように変更することで、ユーザーを別のログインに再マッピングします。
ALTER USER ステートメントが SQL のバッチ内の唯一のステートメントである場合、Azure SQL Database では WITH LOGIN 句がサポートされます。 ALTER USER ステートメントが SQL バッチ内の唯一のステートメントではない場合、または動的 SQL で実行されている場合、WITH LOGIN 句はサポートされません。
NAME =newUserName: このユーザーの新しい名前を指定します。 newUserName は現在のデータベースに存在しない名前にする必要があります。
DEFAULT_SCHEMA = { schemaName | NULL } このユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマを指定します。 既定のスキーマを NULL に設定すると、既定のスキーマが Windows グループから削除されます。 Windows ユーザーでは、NULL オプションは使用できません。
PASSWORD = 'password'
変更するユーザーのパスワードを指定します。 パスワードでは大文字と小文字が区別されます。
Note
このオプションは、包含ユーザーに対してのみ使用できます。 詳しくは、「包含データベース」および「sp_migrate_user_to_contained (Transact-SQL)」をご覧ください。
OLD_PASSWORD ='oldpassword'
'password' で置き換える現在のユーザー パスワードです。 パスワードでは大文字と小文字が区別されます。 ALTER ANY USER 権限がない場合、パスワードを変更するには、OLD_PASSWORD が必要です。 OLD_PASSWORD を必須にすることで、IMPERSONATION 権限を持つユーザーによるパスワードの変更を防止できます。
Note
このオプションは、包含ユーザーに対してのみ使用できます。
DEFAULT_LANGUAGE ={ NONE | <lcid> | <language name> | <language alias> }
ユーザーに割り当てる既定の言語を指定します。 このオプションを NONE に設定した場合、既定の言語はデータベースの現在の既定の言語に設定されます。 データベースの既定の言語が将来変更されても、ユーザーの既定の言語は変更されません。 DEFAULT_LANGUAGE には、ローカル ID (LCID)、言語の名前、または言語の別名を指定できます。
Note
このオプションは包含データベースでのみ指定でき、また、包含ユーザーに対してのみ指定できます。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
一括コピー操作でのサーバーの暗号化メタデータ チェックを抑制します。 これによりユーザーは、データを暗号化解除することなく、テーブルまたはデータベース間で暗号化データを一括コピーできます。 既定値は OFF です。
警告
このオプションを不適切に使用すると、データが破損する場合があります。 詳細については、「Always Encrypted で保護された機微なデータの移行」を参照してください。
解説
既定のスキーマは、このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマになります。 特に指定しない限り、このデータベース ユーザーによって作成されたオブジェクトの所有者になるのは、既定のスキーマです。
ユーザーに既定のスキーマが設定されている場合は、その既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが所属しているグループに既定のスキーマが指定されている場合は、グループの既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが複数のグループに所属している場合、そのユーザーの既定のスキーマは、最も小さい principle_id と明示的に設定された既定のスキーマを持つ Windows グループのスキーマになります。 ユーザーに対する既定のスキーマを決定できない場合は、dbo スキーマが使用されます。
DEFAULT_SCHEMA には、現在データベースに存在しないスキーマも設定できます。 したがって、スキーマが作成される前に DEFAULT_SCHEMA をユーザーに割り当てることができます。
証明書または非対称キーにマップされているユーザーに対して、DEFAULT_SCHEMA を指定することはできません。
重要
ユーザーが固定サーバー ロール sysadmin のメンバーである場合、DEFAULT_SCHEMA の値は無視されます。 固定サーバー ロール sysadmin のすべてのメンバーには、dbo
の既定のスキーマが割り当てられます。
Windows のログインまたはグループにマップされているユーザーの名前を変更できるのは、新しいユーザー名の SID とデータベースに記録されている SID が一致する場合だけです。 この条件により、データベースにおける Windows ログインのなりすましを防止できます。
WITH LOGIN 句を使用すると、ユーザーを別のログインに再マップできます。 ログインのないユーザー、証明書にマップされているユーザー、非対称キーにマップされているユーザーを、この句を使って再マップすることはできません。 SQL ユーザーおよび Windows ユーザー (またはグループ) のみ再マップできます。 WITH LOGIN 句は、Windows アカウントを SQL Server ログインに変更するなど、ユーザーの種類の変更には使用できません。 唯一の例外は、Windows ユーザーを Microsoft Entra ユーザーに変更する場合です。
Note
以下の規則は、Azure SQL Managed Instance 上の Windows ユーザーには適用されません。Azure SQL Managed Instance での Windows ログインの作成はサポートされていないためです。 WITH LOGIN オプションは、Microsoft Entra ログインが存在する場合にのみ使用できます。
次の条件を満たす場合、ユーザーの名前はログイン名に自動的に変更されます。
ユーザーが Windows ユーザーである。
名前が Windows 名である (円記号を含む)。
新しい名前が指定されていない。
現在の名前がログイン名とは異なる。
そうでない場合は、呼び出し元が NAME 句を追加で呼び出さない限り、ユーザーの名前は変更されません。
SQL Server のログイン、証明書、非対称キーにマップされているユーザーの名前には、円記号 (\) を含めることはできません。
注意事項
SQL Server 2005 からスキーマの動作が変更されました。 その結果、スキーマがデータベース ユーザーと同じであると想定しているコードでは、正しい結果が返されない場合があります。 CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION のいずれかの DDL ステートメントが使用されたことのあるデータベースでは、sysobjects などの古いカタログ ビューを使用しないでください。 そのようなデータベースでは、代わりに新しいカタログ ビューを使用してください。 新しいカタログ ビューでは、SQL Server 2005 で導入されたプリンシパルとスキーマの分離が考慮されます。 カタログ ビューの詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。
Azure SQL Managed Instance に移行された SQL オンプレミスの Windows ユーザーに関する解説
これらの解説は、Microsoft Entra ID とフェデレーションおよび同期された Windows ユーザーとしての認証に適用されます。
- Microsoft Entra ID にマップされている Windows ユーザーまたはグループの検証は、移行目的で使用されるすべてのバージョンの ALTER USER 構文で Graph API を使用して既定で行われます。
- 別名が設定された (元の Windows アカウントとは異なる名前を使用する) オンプレミスのユーザーは、別名が設定された名前を保持します。
- Microsoft Entra 認証の場合、LOGIN パラメーターは Azure SQL Managed Instance にのみ適用され、SQL Database では使用できません。
- Microsoft Entra プリンシパルのログインを表示するには、次のコマンドを使用します。
select * from sys.server_principals
.
- ログインの指定された種類が
E
またはX
であることを確認します。 - PASSWORD オプションは、Microsoft Entra ユーザーには使用できません。
- すべての移行ケースで、Windows ユーザーまたはグループのロールとアクセス許可は、新しい Microsoft Entra ユーザーまたはグループに自動的に転送されます。
- WINDOWS ユーザーとグループをオンプレミスの SQL から Microsoft Entra のユーザーとグループに変更するには、新しい構文拡張機能 FROM EXTERNAL PROVIDER を使用できます。 Windows ドメインは Microsoft Entra ID とフェデレーションする必要があり、この拡張機能を使用する場合は、すべての Windows ドメイン メンバーが Microsoft Entra ID に存在する必要があります。 FROM EXTERNAL PROVIDER 構文は Azure SQL Managed Instance に適用され、Windows ユーザーが元の SQL インスタンスにログインせず、スタンドアロンの Microsoft Entra データベース ユーザーにマップする必要がある場合に使用する必要があります。
- この場合、許可されるユーザー名は次のようになります。
- Widows ユーザー (domain\user)。
- Windows グループ (MyWindowsGroup)。
- Windows の別名 (MyWindowsAlias)。
- ALTER コマンドの結果は、古い userName を、古いユーザー名の元の SID に基づいて Microsoft Entra ID で見つかった対応する名前に置き換えます。 変更された名前は置き換えられ、データベースのメタデータに格納されます。
- (domain\user) は Microsoft Entra user@domain.comに置き換えられます。
- (domain\MyWindowsGroup) は Microsoft Entra グループに置き換えられます。
- (MyWindowsAlias) は変更されませんが、このユーザーの SID は Microsoft Entra ID でチェックインされます。
Note
objectID に変換された元のユーザーの SID が Microsoft Entra ID で見つからない場合、ALTER USER コマンドは失敗します。
- 変更されたユーザーを表示するには、次のコマンドを使います:
select * from sys.database_principals
- ユーザーの指定された種類
E
またはX
を確認します。 - Windows ユーザーを Microsoft Entra ユーザーに移行するために NAME を使用する場合は、次の制限が適用されます。
- 有効な LOGIN を指定する必要があります。
- NAME は Microsoft Entra ID でチェックされ、次の場合にのみ使用できます。
- LOGIN の名前。
- エイリアス - 名前は Microsoft Entra ID に存在できません。
- その他のすべての場合、この構文は失敗します。
セキュリティ
Note
ALTER ANY USER 権限を持つユーザーは、任意のユーザーの既定のスキーマを変更できます。 変更されたスキーマを所有するユーザーは、知らずに間違ったテーブルからデータを選択したり、間違ったスキーマからコードを実行する可能性があります。
アクセス許可
ユーザーの名前を変更するには、ALTER ANY USER 権限が必要です。
ターゲットを変更するには、ユーザーのログインにデータベースの CONTROL 権限が必要です。
データベースに対する CONTROL 権限を持つユーザーのユーザー名を変更するには、データベースに対する CONTROL 権限が必要です。
既定のスキーマまたは言語を変更するには、ユーザーに対する ALTER 権限が必要です。 ユーザーは自分が所有する既定のスキーマまたは言語を変更できます。
例
すべての例は、ユーザー データベースで実行されます。
A. データベース ユーザーの名前を変更する
次の例では、データベース ユーザー Mary5
の名前を Mary51
に変更します。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. ユーザーの既定のスキーマを変更する
次の例では、ユーザー Mary51
の既定のスキーマを Purchasing
に変更します。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
C. 複数のオプションを一度に変更する
次の例では、包含データベース ユーザーに対する複数のオプションを 1 つのステートメントで変更します。
ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per'
, DEFAULT_LANGUAGE= French ;
GO
D. 移行後にデータベース内のユーザーを Microsoft Entra ログインにマップする
次の例では、ユーザーを再マップし、Microsoft Entra ユーザーにwestus/joe
joe@westus.com
します。 この例は、マネージド インスタンスに既に存在しているログインを対象としています。 これは、Azure SQL Managed Instance へのデータベース移行を完了し、Microsoft Entra ログインを使用して認証を行う場合に実行する必要があります。
ALTER USER [westus/joe] WITH LOGIN = [joe@westus.com]
E. Azure SQL Managed Instance にログインせずにデータベース内の古い Windows ユーザーを Microsoft Entra ユーザーにマップする
次の例では、ログインなしで westus/joe
ユーザーを Microsoft Entra ユーザー ( joe@westus.com
) に再マップします。 フェデレーション ユーザーは Microsoft Entra ID に存在する必要があります。
ALTER USER [westus/joe] FROM EXTERNAL PROVIDER
F. ユーザー エイリアスを既存の Microsoft Entra ログインにマップする
次の例では、ユーザー名 westus\joe
が joe_alias
に再マップされます。 この場合、対応する Microsoft Entra ログインは joe@westus.com
。
ALTER USER [westus/joe] WITH LOGIN = [joe@westus.com], name= joe_alias
G. Azure SQL Managed Instance で移行された Windows グループを Microsoft Entra グループにマップする
次の例では、マネージド インスタンス内の Microsoft Entra グループ westus\mygroup
にmygroup
、古いオンプレミス グループを再マップします。 グループは Microsoft Entra ID に存在する必要があります。
ALTER USER [westus\mygroup] WITH LOGIN = mygroup
関連項目
* Azure Synapse
Analytics *
Azure Synapse Analytics
構文
-- Syntax for Azure Synapse
ALTER USER userName
WITH <set_item> [ ,...n ]
<set_item> ::=
NAME = newUserName
| LOGIN = loginName
| DEFAULT_SCHEMA = schema_name
[;]
引数
userName: データベース内でユーザーを識別する名前を指定します。
LOGIN =loginName: ユーザーのセキュリティ識別子 (SID) を別のログインの SID に一致するように変更することで、ユーザーを別のログインに再マッピングします。
ALTER USER ステートメントが SQL のバッチ内の唯一のステートメントである場合、Azure SQL Database では WITH LOGIN 句がサポートされます。 ALTER USER ステートメントが SQL バッチ内の唯一のステートメントではない場合、または動的 SQL で実行されている場合、WITH LOGIN 句はサポートされません。
NAME =newUserName: このユーザーの新しい名前を指定します。 newUserName は現在のデータベースに存在しない名前にする必要があります。
DEFAULT_SCHEMA = { schemaName | NULL } このユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマを指定します。 既定のスキーマを NULL に設定すると、既定のスキーマが Windows グループから削除されます。 Windows ユーザーでは、NULL オプションは使用できません。
解説
既定のスキーマは、このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマになります。 特に指定しない限り、このデータベース ユーザーによって作成されたオブジェクトの所有者になるのは、既定のスキーマです。
ユーザーに既定のスキーマが設定されている場合は、その既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが所属しているグループに既定のスキーマが指定されている場合は、グループの既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが複数のグループに所属している場合、そのユーザーの既定のスキーマは、最も小さい principle_id と明示的に設定された既定のスキーマを持つ Windows グループのスキーマになります。 ユーザーに対する既定のスキーマを決定できない場合は、dbo スキーマが使用されます。
DEFAULT_SCHEMA には、現在データベースに存在しないスキーマも設定できます。 したがって、スキーマが作成される前に DEFAULT_SCHEMA をユーザーに割り当てることができます。
証明書または非対称キーにマップされているユーザーに対して、DEFAULT_SCHEMA を指定することはできません。
重要
ユーザーが固定サーバー ロール sysadmin のメンバーである場合、DEFAULT_SCHEMA の値は無視されます。 固定サーバー ロール sysadmin のすべてのメンバーには、dbo
の既定のスキーマが割り当てられます。
WITH LOGIN 句を使用すると、ユーザーを別のログインに再マップできます。 ログインのないユーザー、証明書にマップされているユーザー、非対称キーにマップされているユーザーを、この句を使って再マップすることはできません。 SQL ユーザーおよび Windows ユーザー (またはグループ) のみ再マップできます。 WITH LOGIN 句は、Windows アカウントを SQL Server ログインに変更するなど、ユーザーの種類の変更には使用できません。
次の条件を満たす場合、ユーザーの名前はログイン名に自動的に変更されます。
新しい名前が指定されていない。
現在の名前がログイン名とは異なる。
そうでない場合は、呼び出し元が NAME 句を追加で呼び出さない限り、ユーザーの名前は変更されません。
SQL Server のログイン、証明書、非対称キーにマップされているユーザーの名前には、円記号 (\) を含めることはできません。
注意事項
SQL Server 2005 からスキーマの動作が変更されました。 その結果、スキーマがデータベース ユーザーと同じであると想定しているコードでは、正しい結果が返されない場合があります。 CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION のいずれかの DDL ステートメントが使用されたことのあるデータベースでは、sysobjects などの古いカタログ ビューを使用しないでください。 そのようなデータベースでは、代わりに新しいカタログ ビューを使用してください。 新しいカタログ ビューでは、SQL Server 2005 で導入されたプリンシパルとスキーマの分離が考慮されます。 カタログ ビューの詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。
セキュリティ
Note
ALTER ANY USER 権限を持つユーザーは、任意のユーザーの既定のスキーマを変更できます。 変更されたスキーマを所有するユーザーは、知らずに間違ったテーブルからデータを選択したり、間違ったスキーマからコードを実行する可能性があります。
アクセス許可
ユーザーの名前を変更するには、ALTER ANY USER 権限が必要です。
ターゲットを変更するには、ユーザーのログインにデータベースの CONTROL 権限が必要です。
データベースに対する CONTROL 権限を持つユーザーのユーザー名を変更するには、データベースに対する CONTROL 権限が必要です。
既定のスキーマまたは言語を変更するには、ユーザーに対する ALTER 権限が必要です。 ユーザーは自分が所有する既定のスキーマまたは言語を変更できます。
例
すべての例は、ユーザー データベースで実行されます。
A. データベース ユーザーの名前を変更する
次の例では、データベース ユーザー Mary5
の名前を Mary51
に変更します。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. ユーザーの既定のスキーマを変更する
次の例では、ユーザー Mary51
の既定のスキーマを Purchasing
に変更します。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
関連項目
* Analytics
Platform System (PDW) *
分析プラットフォーム システム
構文
-- Syntax for Analytics Platform System
ALTER USER userName
WITH <set_item> [ ,...n ]
<set_item> ::=
NAME = newUserName
| LOGIN = loginName
| DEFAULT_SCHEMA = schema_name
[;]
引数
userName: データベース内でユーザーを識別する名前を指定します。
LOGIN =loginName: ユーザーのセキュリティ識別子 (SID) を別のログインの SID に一致するように変更することで、ユーザーを別のログインに再マッピングします。
ALTER USER ステートメントが SQL のバッチ内の唯一のステートメントである場合、Azure SQL Database では WITH LOGIN 句がサポートされます。 ALTER USER ステートメントが SQL バッチ内の唯一のステートメントではない場合、または動的 SQL で実行されている場合、WITH LOGIN 句はサポートされません。
NAME =newUserName: このユーザーの新しい名前を指定します。 newUserName は現在のデータベースに存在しない名前にする必要があります。
DEFAULT_SCHEMA = { schemaName | NULL } このユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマを指定します。 既定のスキーマを NULL に設定すると、既定のスキーマが Windows グループから削除されます。 Windows ユーザーでは、NULL オプションは使用できません。
解説
既定のスキーマは、このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマになります。 特に指定しない限り、このデータベース ユーザーによって作成されたオブジェクトの所有者になるのは、既定のスキーマです。
ユーザーに既定のスキーマが設定されている場合は、その既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが所属しているグループに既定のスキーマが指定されている場合は、グループの既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが複数のグループに所属している場合、そのユーザーの既定のスキーマは、最も小さい principle_id と明示的に設定された既定のスキーマを持つ Windows グループのスキーマになります。 ユーザーに対する既定のスキーマを決定できない場合は、dbo スキーマが使用されます。
DEFAULT_SCHEMA には、現在データベースに存在しないスキーマも設定できます。 したがって、スキーマが作成される前に DEFAULT_SCHEMA をユーザーに割り当てることができます。
証明書または非対称キーにマップされているユーザーに対して、DEFAULT_SCHEMA を指定することはできません。
重要
ユーザーが固定サーバー ロール sysadmin のメンバーである場合、DEFAULT_SCHEMA の値は無視されます。 固定サーバー ロール sysadmin のすべてのメンバーには、dbo
の既定のスキーマが割り当てられます。
WITH LOGIN 句を使用すると、ユーザーを別のログインに再マップできます。 ログインのないユーザー、証明書にマップされているユーザー、非対称キーにマップされているユーザーを、この句を使って再マップすることはできません。 SQL ユーザーおよび Windows ユーザー (またはグループ) のみ再マップできます。 WITH LOGIN 句は、Windows アカウントを SQL Server ログインに変更するなど、ユーザーの種類の変更には使用できません。
次の条件を満たす場合、ユーザーの名前はログイン名に自動的に変更されます。
新しい名前が指定されていない。
現在の名前がログイン名とは異なる。
そうでない場合は、呼び出し元が NAME 句を追加で呼び出さない限り、ユーザーの名前は変更されません。
SQL Server のログイン、証明書、非対称キーにマップされているユーザーの名前には、円記号 (\) を含めることはできません。
注意事項
SQL Server 2005 からスキーマの動作が変更されました。 その結果、スキーマがデータベース ユーザーと同じであると想定しているコードでは、正しい結果が返されない場合があります。 CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION のいずれかの DDL ステートメントが使用されたことのあるデータベースでは、sysobjects などの古いカタログ ビューを使用しないでください。 そのようなデータベースでは、代わりに新しいカタログ ビューを使用してください。 新しいカタログ ビューでは、SQL Server 2005 で導入されたプリンシパルとスキーマの分離が考慮されます。 カタログ ビューの詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。
セキュリティ
Note
ALTER ANY USER 権限を持つユーザーは、任意のユーザーの既定のスキーマを変更できます。 変更されたスキーマを所有するユーザーは、知らずに間違ったテーブルからデータを選択したり、間違ったスキーマからコードを実行する可能性があります。
アクセス許可
ユーザーの名前を変更するには、ALTER ANY USER 権限が必要です。
ターゲットを変更するには、ユーザーのログインにデータベースの CONTROL 権限が必要です。
データベースに対する CONTROL 権限を持つユーザーのユーザー名を変更するには、データベースに対する CONTROL 権限が必要です。
既定のスキーマまたは言語を変更するには、ユーザーに対する ALTER 権限が必要です。 ユーザーは自分が所有する既定のスキーマまたは言語を変更できます。
例
すべての例は、ユーザー データベースで実行されます。
A. データベース ユーザーの名前を変更する
次の例では、データベース ユーザー Mary5
の名前を Mary51
に変更します。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. ユーザーの既定のスキーマを変更する
次の例では、ユーザー Mary51
の既定のスキーマを Purchasing
に変更します。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO