ALTER USER (Transact-SQL)

データベース ユーザーの名前、またはデータベースの既定のスキーマを変更します。

Topic link iconTransact-SQL 構文表記規則

製品を選択する

次の行で、興味のある製品の名前を選択します。その製品の情報だけが表示されます。

* 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

関連項目

* SQL Database *

 

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

引数

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 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

このオプションは、包含ユーザーに対してのみ使用できます。

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

構文

重要

Azure AD ログインを持つユーザーに適用する場合は、Azure SQL Managed Instance に対して次のオプション (DEFAULT_SCHEMA = { schemaName | NULL }DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
) のみがサポートされます。Azure SQL Managed Instance に移行されたデータベース内のユーザーの再マップに役立つ新しい構文拡張機能が追加されました。 ALTER USER 構文を使用すると、Azure AD を使ってフェデレーションおよび同期されたドメインのデータベース ユーザーを、Azure AD ログインにマップできます。

-- 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 ユーザーを Azure AD ユーザーに変更する場合です。

Note

以下の規則は、Azure SQL Managed Instance 上の Windows ユーザーには適用されません。Azure SQL Managed Instance での Windows ログインの作成はサポートされていないためです。 WITH LOGIN オプションは、Azure AD ログインが存在する場合にのみ使用できます。

次の条件を満たす場合、ユーザーの名前はログイン名に自動的に変更されます。

  • ユーザーが 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 ユーザーに関する解説

次の解説は、Azure AD とのフェデレーションおよび同期を行った Windows ユーザーとしての認証に適用されます。

Note

作成後の Azure SQL Managed Instance 機能の Azure AD 管理者が変更されました。 詳しくは、「マネージド インスタンス用の新しい Azure AD 管理機能」をご覧ください。

  • Azure AD にマップされる Windows ユーザーまたはグループの検証は、既定では、移行の目的で使用されるすべてのバージョンの ALTER USER 構文で、Graph API によって実行されます。
  • 別名が設定された (元の Windows アカウントとは異なる名前を使用する) オンプレミスのユーザーは、別名が設定された名前を保持します。
  • Azure AD 認証では、LOGIN パラメーターは Azure SQL Managed Instance にのみ適用され、SQL Database では使用できません。
  • Azure AD プリンシパルのログインを表示するには、次のコマンドを使います: select * from sys.server_principals
  • ログインの指定された種類が E または X であることを確認します。
  • PASSWORD オプションは、Azure AD ユーザーには使用できません。
  • 移行のあらゆるケースにおいて、Windows ユーザーまたはグループのロールとアクセス許可は、新しい Azure AD ユーザーまたはグループに自動的に転送されます。
  • Windows ユーザーおよびグループを、SQL オンプレミスから Azure AD ユーザーおよびグループに変更するために、新しい構文拡張機能 FROM EXTERNAL PROVIDER を使用できます。 この拡張機能を使用する場合、Windows ドメインが Azure AD とフェデレーションされていて、かつすべての Windows ドメイン メンバーが Azure AD 内に存在している必要があります。 FROM EXTERNAL PROVIDER 構文は Azure SQL Managed Instance に適用されます。これは、Windows ユーザーが元の SQL インスタンスに対するログインを持っておらず、スタンドアロンの Azure AD データベース ユーザーにマップする必要がある場合に使用する必要があります。
  • この場合、許可されるユーザー名は次のようになります。
  • Widows ユーザー (domain\user)。
  • Windows グループ (MyWidnowsGroup)。
  • Windows の別名 (MyWindowsAlias)。
  • ALTER コマンドの結果によって、古い userName が、古い userName の元の SID に基づいて Azure AD で検索された対応する名前に置き換えられます。 変更された名前は置き換えられ、データベースのメタデータに格納されます。
  • (domain\user) は、Azure AD user@domain.com に置き換えられます。
  • (domain\MyWidnowsGroup) は、Azure AD グループに置き換えられます。
  • (MyWindowsAlias) は変更されませんが、このユーザーの SID は Azure AD でチェックされます。

Note

objectID に変換された元のユーザーの SID が Azure AD 内に見つからない場合、ALTER USER コマンドは失敗します。

  • 変更されたユーザーを表示するには、次のコマンドを使います: select * from sys.database_principals
  • ユーザーの指定された種類 E または X を確認します。
  • Windows ユーザーを Azure AD ユーザーに移行するために NAME を使用する場合は、次の制限が適用されます。
  • 有効な LOGIN を指定する必要があります。
  • NAME は Azure AD でチェックされ、次のいずれかである必要があります。
  • LOGIN の名前。
  • 別名 - 名前は Azure AD に存在できません。
  • その他のすべての場合、この構文は失敗します。

セキュリティ

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. 移行後にデータベース内のユーザーを Azure AD ログインにマップする

次の例では、ユーザーが再マップされ、westus/joe が Azure AD ユーザー joe@westus.com にマップされます。 この例は、マネージド インスタンスに既に存在しているログインを対象としています。 これは、データベースを Azure SQL Managed Instance に移行した後、Azure AD ログインを使って認証する必要がある場合に実行する必要があります。

ALTER USER [westus/joe] WITH LOGIN = joe@westus.com

E. Azure SQL Managed Instance でのログインを持たないデータベース内の古い Windows ユーザーを、Azure AD ユーザーにマップする

次の例では、ログインを持たないユーザー westus/joe が、Azure AD ユーザー joe@westus.com に再マップされます。 フェデレーション ユーザーは Azure AD 内に存在している必要があります。

ALTER USER [westus/joe] FROM EXTERNAL PROVIDER

F. ユーザーの別名を既存の Azure AD ログインにマップする

次の例では、ユーザー名 westus\joejoe_alias に再マップされます。 この場合、対応する Azure AD ログインは joe@westus.com です。

ALTER USER [westus/joe] WITH LOGIN = joe@westus.com, name= joe_alias

G. Azure SQL Managed Instance で移行された Windows グループを Azure AD グループにマップする

次の例では、古いオンプレミスのグループ westus\mygroup を、マネージド インスタンスの Azure AD グループ mygroup に再マップします。 このグループは Azure AD 内に存在している必要があります。

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

関連項目