ALTER USER (Transact-SQL)

重新命名資料庫使用者或變更其預設結構描述。

Transact-SQL 語法慣例

注意

Microsoft Entra 標識符 先前稱為 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 群組移除預設結構描述。 NULL 選項不可用於 Windows 使用者。

PASSWORD = 'password' 適用於:SQL Server 2012 (11.x) 和更新版本、SQL Database。

指定正在變更之使用者的密碼。 密碼會區分大小寫。

注意

只有包含的使用者能夠使用此選項。 如需詳細資訊,請參閱自主資料庫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 權限的使用者變更密碼。

注意

只有包含的使用者能夠使用此選項。

DEFAULT_LANGUAGE ={ NONE | <lcid> | <語言名稱> | <語言別名> }適用於:SQL Server 2012 (11.x) 和更新版本。

指定要指派給使用者的預設語言。 如果這個選項設為 NONE,預設語言將設為資料庫的目前預設語言。 如果稍後變更了資料庫的預設語言,使用者的預設語言會保持不變。 DEFAULT_LANGUAGE 可以是本機識別碼 (lcid)、語言名稱或語言別名。

注意

這個選項只能指定在自主資料庫中,而且只適用於包含的使用者。

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 結構描述。

當新使用者名稱的 SID 符合資料庫所記錄的 SID 時,您可以變更對應至 Windows 登入或群組的使用者名稱。 這項檢查可防止資料庫中詐騙的 Windows 登入。

WITH LOGIN 子句可讓使用者重新對應到另一個登入。 沒有登入的使用者、對應至憑證或對應至非對稱金鑰的使用者,都無法使用這個子句來重新對應。 只有 SQL 使用者和 Windows 使用者 (或群組) 才能重新對應。 WITH LOGIN 子句無法用來變更使用者的類型,例如將 Windows 帳戶變更為 SQL Server 登入。

當您從另一部伺服器還原資料庫,並讓資料庫使用者對應至 SQL Server 登入時,可能會發生不相符的 SID。 您可以使用 WITH LOGIN 子句來更正這種情況,方法是將資料庫中的使用者 SID 取代為伺服器的登入 SID。

如果下列條件成立,使用者的名稱將會自動重新命名為登入名稱。

  • 使用者是 Windows 使用者。

  • 名稱是 Windows 名稱 (包含反斜線)。

  • 沒有指定任何新的名稱。

  • 目前的名稱不同於登入名稱。

否則,除非呼叫者額外叫用 NAME 子句,否則使用者將不會重新命名。

對應至 SQL Server 登入、憑證或非對稱金鑰的使用者名稱不可包含反斜線字元 (\)。

警告

從 SQL Server 2005 開始,結構描述的行為已經變更。 結果是,假設結構描述相當於資料庫使用者的程式碼可能不會傳回正確的結果。 不應該在曾經使用下列任何一個 DDL 陳述式的資料庫中使用舊的目錄檢視 (包括 sysobjects):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。 在此類資料庫中,必須改用新的目錄檢視。 新的目錄檢視會考量 SQL Server 2005 中所導入的主體和結構描述的分隔。 如需目錄檢視的詳細資訊,請參閱目錄檢視 (Transact-SQL)

安全性

注意

具有 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. 一次變更數個選項

下列範例會在一個陳述式中變更自主資料庫使用者的數個選項。

適用於: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

下列範例會更正資料庫中的使用者 SID,以符合伺服器上已驗證登入 SQL Server 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 群組移除預設結構描述。 NULL 選項不可用於 Windows 使用者。

PASSWORD = 'password' 適用於:SQL Server 2012 (11.x) 和更新版本、SQL Database。

指定正在變更之使用者的密碼。 密碼會區分大小寫。

注意

只有包含的使用者能夠使用此選項。 如需詳細資訊,請參閱自主資料庫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 權限的使用者變更密碼。

注意

只有包含的使用者能夠使用此選項。

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 結構描述。

當新使用者名稱的 SID 符合資料庫所記錄的 SID 時,您可以變更對應至 Windows 登入或群組的使用者名稱。 這項檢查可防止資料庫中詐騙的 Windows 登入。

WITH LOGIN 子句可讓使用者重新對應到另一個登入。 沒有登入的使用者、對應至憑證或對應至非對稱金鑰的使用者,都無法使用這個子句來重新對應。 只有 SQL 使用者和 Windows 使用者 (或群組) 才能重新對應。 WITH LOGIN 子句無法用來變更使用者的類型,例如將 Windows 帳戶變更為 SQL Server 登入。

如果下列條件成立,使用者的名稱將會自動重新命名為登入名稱。

  • 使用者是 Windows 使用者。

  • 名稱是 Windows 名稱 (包含反斜線)。

  • 沒有指定任何新的名稱。

  • 目前的名稱不同於登入名稱。

否則,除非呼叫者額外叫用 NAME 子句,否則使用者將不會重新命名。

對應至 SQL Server 登入、憑證或非對稱金鑰的使用者名稱不可包含反斜線字元 (\)。

警告

從 SQL Server 2005 開始,結構描述的行為已經變更。 結果是,假設結構描述相當於資料庫使用者的程式碼可能不會傳回正確的結果。 不應該在曾經使用下列任何一個 DDL 陳述式的資料庫中使用舊的目錄檢視 (包括 sysobjects):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。 在此類資料庫中,必須改用新的目錄檢視。 新的目錄檢視會考量 SQL Server 2005 中所導入的主體和結構描述的分隔。 如需目錄檢視的詳細資訊,請參閱目錄檢視 (Transact-SQL)

安全性

注意

具有 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. 一次變更數個選項

下列範例會在一個陳述式中變更自主資料庫使用者的數個選項。

ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per';
GO

另請參閱

* SQL 受控執行個體 *

 

Azure SQL 受控執行個體

語法

重要

套用至具有 Microsoft Entra 登入的使用者時,僅支援下列選項 Azure SQL 受控執行個體:DEFAULT_SCHEMA = { schemaName | NULL }而且DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }

新增了新的語法延伸模組,以協助重新對應移轉至 Azure SQL 受控執行個體 的資料庫中的使用者。 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 群組移除預設結構描述。 NULL 選項不可用於 Windows 使用者。

PASSWORD = 'password'

指定正在變更之使用者的密碼。 密碼會區分大小寫。

注意

只有包含的使用者能夠使用此選項。 如需詳細資訊,請參閱自主資料庫sp_migrate_user_to_contained (Transact-SQL)

OLD_PASSWORD ='oldpassword'

目前的使用者密碼,將由 'password' 取代。 密碼會區分大小寫。 密碼區分大小寫。除非您有 ALTER ANY USER 權限,否則需要 OLD_PASSWORD 才能變更密碼。 需要 OLD_PASSWORD 可防止具有 IMPERSONATION 權限的使用者變更密碼。

注意

只有包含的使用者能夠使用此選項。

DEFAULT_LANGUAGE ={ NONE | <lcid> | <語言名稱> | <語言別名> }

指定要指派給使用者的預設語言。 如果這個選項設為 NONE,預設語言將設為資料庫的目前預設語言。 如果稍後變更了資料庫的預設語言,使用者的預設語言會保持不變。 DEFAULT_LANGUAGE 可以是本機識別碼 (lcid)、語言名稱或語言別名。

注意

這個選項只能指定在自主資料庫中,而且只適用於包含的使用者。

ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]

在大量複製作業時隱藏伺服器上的密碼編譯中繼資料檢查。 這會讓使用者得以在資料表或資料庫間大量複製加密資料,而無須解密資料。 預設值為 OFF。

警告

不當使用這個選項會導致資料損毀。 如需詳細資訊,請參閱移轉透過 Always Encrypted 保護的機密資料

備註

預設結構描述是伺服器在解析這個資料庫使用者之物件名稱時,所搜尋到的第一個結構描述。 除非另有指定,否則預設結構描述是此資料庫使用者建立之物件的擁有者。

如果使用者有預設結構描述,則使用預設結構描述。 如果使用者沒有預設結構描述,但使用者是具有預設結構描述群組的成員,則會使用群組的預設結構描述。 如果使用者沒有預設結構描述,且是具有一個以上群組的成員,則使用者預設結構描述將會是具有最低 principle_id 且明確設定預設結構描述 Windows 群組的結構描述。 如果無法判斷使用者的預設結構描述,即會使用 dbo 結構描述。

DEFAULT_SCHEMA 可設為目前不存在於資料庫中的結構描述。 因此,您可以在建立該結構描述之前,先將 DEFAULT_SCHEMA 指派給使用者。

DEFAULT_SCHEMA 不能指定給對應至憑證或非對稱金鑰的使用者。

重要

如果使用者是 sysadmin 固定伺服器角色的成員,則會忽略 DEFAULT_SCHEMA 的值。 sysadmin 固定伺服器角色的所有成員都有預設的 dbo 結構描述。

當新使用者名稱的 SID 符合資料庫所記錄的 SID 時,您可以變更對應至 Windows 登入或群組的使用者名稱。 這項檢查可防止資料庫中詐騙的 Windows 登入。

WITH LOGIN 子句可讓使用者重新對應到另一個登入。 沒有登入的使用者、對應至憑證或對應至非對稱金鑰的使用者,都無法使用這個子句來重新對應。 只有 SQL 使用者和 Windows 使用者 (或群組) 才能重新對應。 WITH LOGIN 子句無法用來變更使用者的類型,例如將 Windows 帳戶變更為 SQL Server 登入。 唯一的例外狀況是將 Windows 用戶變更為 Microsoft Entra 使用者時。

注意

下列規則不適用於 Azure SQL 受控執行個體上的 Windows 使用者,因為不支援在 Azure SQL 受控執行個體上建立 Windows 登入。 只有在 Microsoft Entra 登入存在時,才能使用 WITH LOGIN 選項。

如果下列條件成立,使用者的名稱將會自動重新命名為登入名稱。

  • 使用者是 Windows 使用者。

  • 名稱是 Windows 名稱 (包含反斜線)。

  • 沒有指定任何新的名稱。

  • 目前的名稱不同於登入名稱。

否則,除非呼叫者額外叫用 NAME 子句,否則使用者將不會重新命名。

對應至 SQL Server 登入、憑證或非對稱金鑰的使用者名稱不可包含反斜線字元 (\)。

警告

從 SQL Server 2005 開始,結構描述的行為已經變更。 結果是,假設結構描述相當於資料庫使用者的程式碼可能不會傳回正確的結果。 不應該在曾經使用下列任何一個 DDL 陳述式的資料庫中使用舊的目錄檢視 (包括 sysobjects):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。 在此類資料庫中,必須改用新的目錄檢視。 新的目錄檢視會考量 SQL Server 2005 中所導入的主體和結構描述的分隔。 如需目錄檢視的詳細資訊,請參閱目錄檢視 (Transact-SQL)

將 SQL 內部部署中的 Windows 使用者移轉到 Azure SQL 受控執行個體的備註

這些備註適用於驗證為已同盟且與 Microsoft Entra 識別元同步處理的 Windows 使用者。

  • 對應至 Microsoft Entra ID 的 Windows 使用者或群組驗證預設會透過用於移轉用途之 ALTER USER 語法的所有版本中的 Graph API 來完成。
  • 已建立別名 (使用與原始 Windows 帳戶不同的名稱) 的內部部署使用者會保留其別名。
  • 針對 Microsoft Entra 驗證,LOGIN 參數僅適用於 Azure SQL 受控執行個體,且無法與 SQL 資料庫 搭配使用。
  • 若要檢視 Microsoft Entra 主體的登入,請使用下列命令:

select * from sys.server_principals.

  • 檢查登入的指定類型為 EX
  • 密碼選項不能用於 Microsoft Entra 使用者。
  • 在所有移轉案例中,Windows 使用者或群組的角色和許可權會自動轉移給新的 Microsoft Entra 使用者或群組。
  • FROM EXTERNAL PROVIDER 是新的語法延伸模組,可用來將 Windows 使用者和群組從 SQL 內部部署變更為 Microsoft Entra 使用者和群組。 使用此延伸模組時,Windows 網域必須與 Microsoft Entra ID 同盟,而且所有 Windows 網域成員都必須存在於 Microsoft Entra ID 中。 FROM EXTERNAL PROVIDER 語法適用於 Azure SQL 受控執行個體,而且應該用於 Windows 用戶沒有原始 SQL 實例的登入,且必須對應至獨立 Microsoft Entra 資料庫用戶的情況。
  • 在此情況下,允許的 userName 可以是:
  • Windows 使用者 (domain\user)。
  • Windows 群組 (MyWindowsGroup)。
  • Windows 別名 (MyWindowAlias)。
  • ALTER 命令的結果會以根據舊 userName 的原始 SID 在 Microsoft Entra ID 中找到的對應名稱取代舊的 userName。 更改後名稱會遭到替換並儲存在資料庫的中繼資料內:
  • domain\user) 將會取代為 Microsoft Entra user@domain.com。
  • domain\MyWidnowsGroup) 將會取代為 Microsoft Entra 群組。
  • MyWindowsAlias) 會保持不變,但此使用者的 SID 將會存回 Microsoft Entra ID。

注意

如果在 Microsoft Entra ID 中找不到轉換成 objectID 的原始使用者的 SID,ALTER USER 命令將會失敗。

  • 若要檢視更改後的使用者,請使用下列命令:select * from sys.database_principals
  • 檢查使用者的指定類型是 EX
  • 當 NAME 用來將 Windows 使用者移轉至 Microsoft Entra 使用者時,適用下列限制:
  • 必須指定有效的 LOGIN。
  • NAME 將會簽入 Microsoft Entra ID,且只能:
  • LOGIN 的名稱。
  • 別名 - 名稱不存在於 Microsoft Entra ID 中。
  • 在其他所有情況下,語法都會失敗。

安全性

注意

具有 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. 一次變更數個選項

下列範例會在一個陳述式中變更自主資料庫使用者的數個選項。

ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per'
, DEFAULT_LANGUAGE= French ;
GO

D. 將資料庫中的用戶對應至移轉后的 Microsoft Entra 登入

下列範例會將使用者重新westus/joe對應至 Microsoft Entra 使用者 。 joe@westus.com 此範例適用於已存在於受控執行個體中的登入。 完成資料庫移轉至 Azure SQL 受控執行個體 之後,必須執行此動作,並想要使用 Microsoft Entra 登入進行驗證。

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

E. 將資料庫中的舊 Windows 用戶對應至 Microsoft Entra 使用者,而不需登入 Azure SQL 受控執行個體

下列範例會將沒有登入的使用者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 受控執行個體 中移轉至 Microsoft Entra 群組的 Windows 群組

下列範例會將舊的內部部署群組 westus\mygroup 重新對應至受控實例中的 Microsoft Entra 群組 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 群組移除預設結構描述。 NULL 選項不可用於 Windows 使用者。

備註

預設結構描述是伺服器在解析這個資料庫使用者之物件名稱時,所搜尋到的第一個結構描述。 除非另有指定,否則預設結構描述是此資料庫使用者建立之物件的擁有者。

如果使用者有預設結構描述,則使用預設結構描述。 如果使用者沒有預設結構描述,但使用者是具有預設結構描述群組的成員,則會使用群組的預設結構描述。 如果使用者沒有預設結構描述,且是具有一個以上群組的成員,則使用者預設結構描述將會是具有最低 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 開始,結構描述的行為已經變更。 結果是,假設結構描述相當於資料庫使用者的程式碼可能不會傳回正確的結果。 不應該在曾經使用下列任何一個 DDL 陳述式的資料庫中使用舊的目錄檢視 (包括 sysobjects):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。 在此類資料庫中,必須改用新的目錄檢視。 新的目錄檢視會考量 SQL Server 2005 中所導入的主體和結構描述的分隔。 如需目錄檢視的詳細資訊,請參閱目錄檢視 (Transact-SQL)

安全性

注意

具有 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 群組移除預設結構描述。 NULL 選項不可用於 Windows 使用者。

備註

預設結構描述是伺服器在解析這個資料庫使用者之物件名稱時,所搜尋到的第一個結構描述。 除非另有指定,否則預設結構描述是此資料庫使用者建立之物件的擁有者。

如果使用者有預設結構描述,則使用預設結構描述。 如果使用者沒有預設結構描述,但使用者是具有預設結構描述群組的成員,則會使用群組的預設結構描述。 如果使用者沒有預設結構描述,且是具有一個以上群組的成員,則使用者預設結構描述將會是具有最低 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 開始,結構描述的行為已經變更。 結果是,假設結構描述相當於資料庫使用者的程式碼可能不會傳回正確的結果。 不應該在曾經使用下列任何一個 DDL 陳述式的資料庫中使用舊的目錄檢視 (包括 sysobjects):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。 在此類資料庫中,必須改用新的目錄檢視。 新的目錄檢視會考量 SQL Server 2005 中所導入的主體和結構描述的分隔。 如需目錄檢視的詳細資訊,請參閱目錄檢視 (Transact-SQL)

安全性

注意

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

另請參閱