CREATE USER (Transact-SQL)

將使用者加入目前資料庫中。

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

語法

CREATE USER user_name 
    [ { { FOR | FROM }
      { 
        LOGIN login_name 
        | CERTIFICATE cert_name 
        | ASYMMETRIC KEY asym_key_name
      } 
      | WITHOUT LOGIN
    ] 
    [ WITH DEFAULT_SCHEMA = schema_name ]

引數

  • user_name
    指定在這個資料庫內用來識別使用者的名稱。user_name 是 sysname。該名稱長度最多可達 128 個字元。

  • LOGIN login_name
    指定建立資料庫使用者所用的 SQL Server 登入。login_name 在伺服器中必須是有效的登入。當這個 SQL Server 登入進入資料庫時,會取得目前建立之資料庫使用者的名稱和識別碼。

  • CERTIFICATE cert_name
    指定目前建立之資料庫使用者的憑證。

  • ASYMMETRIC KEY asym_key_name
    指定目前建立之資料庫使用者的非對稱金鑰。

  • WITH DEFAULT_SCHEMA **=**schema_name
    指定在解析這個資料庫使用者之物件名稱時,伺服器所搜尋到的第一個結構描述。

  • WITHOUT LOGIN
    指定使用者不對應到現有的登入。

備註

如果省略了 FOR LOGIN,新的資料庫使用者就會對應至同名的 SQL Server 登入。

如果沒有定義 DEFAULT_SCHEMA,資料庫使用者便會使用 dbo 做為其預設的結構描述。DEFAULT_SCHEMA 可設為目前不存在於資料庫中的結構描述。DEFAULT_SCHEMA 可以在它所指向的結構描述建立之前設定。當您建立對應到 Windows 群組、憑證或非對稱金鑰的使用者時,不能指定 DEFAULT_SCHEMA。

重要事項重要事項

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

WITHOUT LOGIN 子句會建立沒有對應至 SQL Server 登入的使用者。這個使用者可以用 guest 的身分連接到其他資料庫。

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

您不能以 CREATE USER 建立 guest 使用者,因為每一個資料庫都已經有 guest 使用者了。您可以授與 guest 使用者 CONNECT 權限來啟用它,如下所示:

GRANT CONNECT TO guest;
GO

您可以在 sys.database_principals 目錄檢視中,看到有關資料庫使用者的資訊。

警告注意事項注意

從 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 權限。

範例

A. 建立資料庫使用者

下列範例會先建立一個具有密碼且名叫 AbolrousHazem 的伺服器登入,然後在 AdventureWorks2008R2 建立一個對應的資料庫使用者 AbolrousHazem。

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2008R2;
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

B. 以預設的結構描述建立資料庫使用者

下列範例會先建立一個具有密碼且名叫 WanidaBenshoof 的伺服器登入,然後再以預設的結構描述 Marketing,建立對應的資料庫使用者 Wanida。

CREATE LOGIN WanidaBenshoof 
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2008R2;
CREATE USER Wanida FOR LOGIN WanidaBenshoof 
    WITH DEFAULT_SCHEMA = Marketing;
GO

C. 從憑證建立資料庫使用者

下列範例會從憑證 CarnationProduction50 建立一個資料庫使用者 JinghaoLiu。

USE AdventureWorks2008R2;
CREATE CERTIFICATE CarnationProduction50
    WITH SUBJECT = 'Carnation Production Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO 

D. 建立及使用不含登入的使用者

下列範例會建立未對應至 SQL Server 登入的資料庫使用者 CustomApp。然後此範例會授與使用者 adventure-works\tengiz0 權限來模擬 CustomApp 使用者。

USE AdventureWorks2008R2 ;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\tengiz0] ;
GO 

若要使用 CustomApp 認證,使用者 adventure-works\tengiz0 會執行下列陳述式。

EXECUTE AS USER = 'CustomApp' ;
GO

若要還原回 adventure-works\tengiz0 認證,使用者會執行下列陳述式。

REVERT ;
GO