ALTER USER (Transact-SQL)

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

主題連結圖示Transact-SQL 語法慣例

語法

ALTER USER userName  
     WITH <set_item> [ ,...n ]

<set_item> ::= 
     NAME = newUserName 
     | DEFAULT_SCHEMA = schemaName
     | LOGIN = loginName

引數

  • userName
    指定在這個資料庫內用來識別使用者的名稱。

  • LOGIN **=**loginName
    變更使用者的安全性識別碼 (SID) 使其符合登入的 SID,以便將使用者重新對應到另一個登入。

  • NAME **=**newUserName
    指定新的名稱給這位使用者。newUserName 不能已存在於目前資料庫中。

  • DEFAULT_SCHEMA **=**schemaName
    指定當伺服器解析這位使用者的物件名稱時,將搜尋的第一個結構描述。

備註

如果 DEFAULT_SCHEMA 未定義,使用者將以 dbo 作為它的預設結構描述。DEFAULT_SCHEMA 可設為目前不存在於資料庫中的結構描述。因此,您可以在建立該結構描述之前,先將 DEFAULT_SCHEMA 指派給使用者。DEFAULT_SCHEMA 不能指定給對應至 Windows 群組、憑證或非對稱金鑰的使用者。

重要注意事項重要事項

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

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

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

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

  • 使用者是 Windows 使用者。

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

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

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

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

[!附註]

具有 ALTER ANY USER 權限的使用者可以變更任何使用者的預設結構描述。結構描述變更過的使用者可能會在不知情的情況下,從錯誤的資料表選取資料或從錯誤的結構描述執行程式碼。

對應至 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 權限。使用者只能變更他們自己的預設結構描述。

需要資料庫的 CONTROL 權限,才能將使用者重新對應到登入。

範例

A. 變更資料庫使用者的名稱

下列範例會將資料庫使用者名稱 Mary5 變更為 Mary51。

USE AdventureWorks;
ALTER USER Mary5 WITH NAME = Mary51;
GO 

B. 變更使用者的預設結構描述

下列範例會將使用者 Mary51 的預設結構描述變更為 Purchasing。

USE AdventureWorks;
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO