CREATE USER (Transact-SQL)

 

將使用者加入目前資料庫中。使用者有 11 種類型:

依據 master 登入的使用者:這是最常見的使用者類型。

  • 依據 Windows 使用者登入的使用者。

  • 依據 Windows 群組登入的使用者。

  • 依據使用 SQL Server 驗證登入的使用者。

在資料庫進行驗證的使用者:只有在自主資料庫中才允許。

  • 依據沒有登入之 Windows 使用者的使用者。

  • 依據沒有登入之 Windows 群組的使用者。

  • 具有密碼之自主資料庫使用者。

依據透過 Windows 群組登入連接之 Windows 主體的使用者

  • 依據沒有登入之 Windows 使用者,但可透過 Windows 群組成員資格連接到 Database Engine 的使用者。

  • 依據沒有登入之 Windows 群組,但可透過不同的 Windows 群組成員資格連接到 Database Engine 的使用者。

無法驗證的使用者:這些使用者無法登入 SQL Server 或 SQL Database。

  • 沒有登入的使用者。無法登入但可獲得權限。

  • 依據憑證的使用者。無法登入,但可獲得權限而且可簽署模組。

  • 依據非對稱金鑰的使用者。無法登入,但可獲得權限而且可簽署模組。

適用於:SQL Server (SQL Server 2008 至目前的版本)、Azure SQL Database、SQL Database V12、(某些區域中的預覽)。

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

語法

          -- SQL Server Syntax

          -- Users based on logins in master
CREATE USER user_name 
    [ 
        { FOR | FROM } LOGIN login_name 
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[ ; ]

-- Users that authenticate at the database (SQL Database Update (Preview) can use most options)
CREATE USER 
    {
      windows_principal [ WITH <options_list> [ ,... ] ]
    | user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ] 
    }
 [ ; ]

-- Users based on Windows principals that connect through Windows group logins
CREATE USER 
    { 
          windows_principal [ { FOR | FROM } LOGIN windows_principal ]
        | user_name { FOR | FROM } LOGIN windows_principal
    }
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[ ; ]

-- Users that cannot authenticate 
CREATE USER user_name 
    {
         WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
       | { FOR | FROM } CERTIFICATE cert_name 
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name 
    }
 [ ; ]

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | SID = sid
          -- Windows Azure SQL Database
CREATE USER user_name
    [ { { FOR | FROM }
      { 
        LOGIN login_name 
      } 
      | WITHOUT LOGIN
      }
    ] 
    [ WITH DEFAULT_SCHEMA = schema_name ] 
[;]

-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]

引數

  • user_name
    指定在這個資料庫內用來識別使用者的名稱。user_namesysname。該名稱長度最多可達 128 個字元。當建立依據 Windows 主體的使用者時,除非指定另一個使用者名稱,否則 Windows 主體名稱會成為使用者名稱。

  • LOGIN login_name
    指定目前建立之資料庫使用者的登入。login_name 必須是伺服器中的有效登入。可以是依據 Windows 主體 (使用者或群組) 的登入,或是使用 SQL Server 驗證的登入。當這個 SQL Server 登入進入資料庫時,它會取得正在建立之資料庫使用者的名稱和識別碼。在建立從 Windows 主體所對應的登入時,請使用以下格式:[<domainName>\<loginName>]。如需範例,請參閱<語法摘要>。

    如果 CREATE USER 陳述式是 SQL 批次中的唯一陳述式,Windows Azure SQL Database 會支援 WITH LOGIN 子句。如果 CREATE USER 陳述式不是 SQL 批次中的唯一陳述式或是在動態 SQL 中執行,則不支援 WITH LOGIN 子句。

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

  • windows_principal'
    為正在建立的資料庫使用者指定 Windows 主體。windows_principal 可以是 Windows 使用者或 Windows 群組。即使 windows_principal 沒有登入,也可以建立使用者。當連接到 SQL Server 時,如果 windows_principal 沒有登入,Windows 主體必須透過有登入的 Windows 群組成員資格在 Database Engine 進行驗證,或者連接字串必須將自主資料庫指定為初始目錄。從 Windows 主體建立使用者時,請使用以下格式:[<domainName>\<loginName>]。如需範例,請參閱<語法摘要>。

  • WITH PASSWORD = 'password'

    適用於:SQL Server 2012 至 SQL Server 2014、SQL Database V12。

    只能用於自主資料庫。指定正在建立之使用者的密碼。

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

  • CERTIFICATE cert_name

    適用於:SQL Server 2008 至 SQL Server 2014、SQL Database V12。

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

  • ASYMMETRIC KEY asym_key_name

    適用於:SQL Server 2008 至 SQL Server 2014、SQL Database V12。

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

  • DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }

    適用於:SQL Server 2012 至 SQL Server 2014、SQL Database V12。

    指定新使用者的預設語言。如果已指定使用者的預設語言,但稍後變更資料庫的預設語言,使用者預設語言會保持為指定值。如果未指定預設語言,則使用者的預設語言將是資料庫的預設語言。如果未指定使用者的預設語言,而稍後變更資料庫的預設語言,使用者的預設語言會變成資料庫的新預設語言。

    System_CAPS_important重要事項

    DEFAULT_LANGUAGE 只用於自主資料庫使用者。

  • SID = sid

    適用於:SQL Server 2012 至 SQL Server 2014。

    僅適用於具有密碼之自主資料庫使用者 (SQL Server 驗證)。指定新資料庫使用者的 SID。如果未選取這個選項,SQL Server 將自動指派 SID。使用 SID 參數即可在多個資料庫中建立具有相同識別 (SID) 的使用者。當您在多個資料庫中建立使用者以準備 AlwaysOn 容錯移轉時,這會很有用。若要判斷使用者的 SID,請查詢 sys.database_principals。

備註

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

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

如果使用者有預設結構描述,則使用預設結構描述。如果使用者沒有預設結構描述,但使用者是有預設結構描述之群組的成員,則使用群組的預設結構描述。如果使用者沒有預設結構描述,而且是有一個以上之群組的成員,使用者的預設結構描述將會是具有最低 principle_id 且明確設定預設結構描述之 Windows 群組的結構描述。(您無法明確選取其中一個可用的預設結構描述當做慣用結構描述)。如果無法判斷使用者的預設結構描述,將使用 dbo 結構描述。

DEFAULT_SCHEMA 可以在它所指向的結構描述建立之前設定。

當您建立對應到憑證或非對稱金鑰的使用者時,不能指定 DEFAULT_SCHEMA。

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

WITHOUT LOGIN 子句會建立沒有對應至 SQL Server 登入的使用者。這個使用者可以用 guest 的身分連接到其他資料庫。可指派權限給這位沒有登入的使用者,而且在安全性內容變更為沒有登入的使用者時,原始使用者會收到沒有登入之使用者的權限。請參閱範例<D.建立及使用不含登入的使用者>。

只有對應到 Windows 主體的使用者可以包含反斜線字元 (\)。

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

GRANT CONNECT TO guest;
GO

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

語法摘要

依據 master 登入的使用者

下列清單顯示依據登入之使用者的可能語法。未列出預設的結構描述選項。

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER SQLAUTHLOGIN

  • CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN

  • CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN

在資料庫進行驗證的使用者

下列清單顯示只能用於自主資料庫使用者的可能語法。建立的使用者與 master 資料庫中的任何登入不相關。未列出預設的結構描述和語言選項。

System_CAPS_security 安全性 注意事項

此語法將資料庫的存取權以及 Database Engine 的新存取權授與使用者。

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER Barry WITH PASSWORD = 'sdjklalie8rew8337!$d'

依據沒有 master 登入之 Windows 主體的使用者

下列清單顯示透過 Windows 群組有 Database Engine 存取權,但是沒有 master 登入之使用者的可能語法。這個語法可以用於所有類型的資料庫。未列出預設的結構描述和語言選項。

這個語法與依據 master 登入的使用者類似,但這個類別的使用者沒有 master 的登入。使用者必須可透過 Windows 群組登入來存取 Database Engine。

這個語法與依據 Windows 主體的自主資料庫使用者類似,但這個類別的使用者沒有 Database Engine 的新存取權。

  • CREATE USER [Domain1\WindowsUserBarry]

  • CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry

  • CREATE USER [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]

  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

無法驗證的使用者

下列清單顯示無法登入 SQL Server 之使用者的可能語法。

  • CREATE USER RIGHTSHOLDER WITHOUT LOGIN

  • CREATE USER CERTUSER FOR CERTIFICATE SpecialCert

  • CREATE USER CERTUSER FROM CERTIFICATE SpecialCert

  • CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey

  • CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey

安全性

建立使用者會授與資料庫存取權,但不會自動授與資料庫物件的任何存取權。在建立使用者之後,一般動作是將使用者加入至有權存取資料庫物件的資料庫角色,或將物件權限授與使用者。

適用於自主資料庫的特殊考量

當連接到自主資料庫時,如果使用者沒有 master 資料庫的登入,連接字串必須加入自主資料庫名稱做為初始目錄。具有密碼之自主資料庫使用者永遠需要初始目錄參數。

在自主資料庫中,建立使用者有助於區隔資料庫與 Database Engine 執行個體,以便輕易將資料庫移至另一個 SQL Server 執行個體。如需詳細資訊,請參閱<自主資料庫>。若要將資料庫使用者從依據 SQL Server 驗證登入的使用者變更為具有密碼之自主資料庫使用者,請參閱<sp_migrate_user_to_contained (Transact-SQL)>。

在自主資料庫中,使用者並不需要有 master 資料庫中的登入。Database Engine 管理員應該了解自主資料庫存取權可在資料庫層級授與,而非 Database Engine 層級。如需詳細資訊,請參閱<自主資料庫的安全性最佳做法>。

當您使用自主的資料庫使用者時Azure SQL Database,使用資料庫層級防火牆規則來設定存取,而非使用伺服器層級防火牆規則。如需詳細資訊,請參閱<sp_set_database_firewall_rule (Azure SQL Database)>。

Permissions

需要資料庫的 ALTER ANY USER 權限。

範例

A.依據 SQL Server 登入建立資料庫使用者

下列範例會先建立一個名為 SQL Server 的 AbolrousHazem 登入,然後在 AbolrousHazem 建立對應的資料庫使用者 AdventureWorks2012。

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

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

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

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

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

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

適用於:SQL Server 2008 至 SQL Server 2014。

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

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

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

USE AdventureWorks2012 ;
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

E.建立具有密碼的自主資料庫使用者

下列範例會建立具有密碼之自主資料庫使用者。您只能在自主資料庫中執行這個範例。

適用於:SQL Server 2012 至 SQL Server 2014。如果 DEFAULT_LANGUAGE 已移除,則這個範例才能運作SQL Database V12。

USE AdventureWorks2012 ;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
    , DEFAULT_LANGUAGE=[Brazilian]
    , DEFAULT_SCHEMA=[dbo]
GO 

F.為網域登入建立自主資料庫使用者

下列範例會為 Contoso 網域中的登入 Fritz,建立自主資料庫使用者。您只能在自主資料庫中執行這個範例。

適用於:SQL Server 2012 至 SQL Server 2014。

USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
GO 

G.建立具有指定 SID 之自主資料庫使用者

下列範例會建立名稱為 CarmenW 的 SQL Server 驗證自主資料庫使用者。您只能在自主資料庫中執行這個範例。

適用於:SQL Server 2012 至 SQL Server 2014。

USE AdventureWorks2012 ;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;

請參閱

建立資料庫使用者
sys.database_principals (Transact-SQL)
ALTER USER (Transact-SQL)
DROP USER (Transact-SQL)
CREATE LOGIN (Transact-SQL)
EVENTDATA (Transact-SQL)
自主資料庫