CREATE USER (Transact-SQL)
將使用者加入目前資料庫中。 使用者有 11 種類型:
依據 master 登入的使用者:這是最常見的使用者類型。
依據 Windows 使用者登入的使用者。
依據 Windows 群組登入的使用者。
依據使用 SQL Server 驗證登入的使用者。
在資料庫進行驗證的使用者:只有在自主資料庫中才允許。
依據沒有登入之 Windows 使用者的使用者。
依據沒有登入之 Windows 群組的使用者。
具有密碼之自主資料庫使用者。
依據透過 Windows 群組登入連接之 Windows 主體的使用者
依據沒有登入之 Windows 使用者,但可透過 Windows 群組成員資格連接到 Database Engine 的使用者。
依據沒有登入之 Windows 群組,但可透過不同的 Windows 群組成員資格連接到 Database Engine 的使用者。
無法驗證的使用者:這些使用者無法登入 SQL Server。
沒有登入的使用者。 無法登入但可獲得權限。
依據憑證的使用者。 無法登入,但可獲得權限而且可簽署模組。
依據非對稱金鑰的使用者。 無法登入,但可獲得權限而且可簽署模組。
語法
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
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
引數
user_name
指定在這個資料庫內用來識別使用者的名稱。 user_name 是 sysname。 該名稱長度最多可達 128 個字元。 當建立依據 Windows 主體的使用者時,除非指定另一個使用者名稱,否則 Windows 主體名稱會成為使用者名稱。LOGIN login_name
指定目前建立之資料庫使用者的登入。 login_name 必須是伺服器中的有效登入。 可以是依據 Windows 主體 (使用者或群組) 的登入,或是使用 SQL Server 驗證的登入。 當這個 SQL Server 登入進入資料庫時,它會取得正在建立之資料庫使用者的名稱和識別碼。 在建立從 Windows 主體所對應的登入時,請使用以下格式:<domainName>\<loginName>。 如需範例,請參閱語法摘要。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'
只能用於自主資料庫。 指定正在建立之使用者的密碼。WITHOUT LOGIN
指定使用者不對應到現有的登入。CERTIFICATE cert_name
指定目前建立之資料庫使用者的憑證。ASYMMETRIC KEY asym_key_name
指定目前建立之資料庫使用者的非對稱金鑰。DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
指定新使用者的預設語言。 如果已指定使用者的預設語言,但稍後變更資料庫的預設語言,使用者預設語言會保持為指定值。 如果未指定預設語言,則使用者的預設語言將是資料庫的預設語言。 如果未指定使用者的預設語言,而稍後變更資料庫的預設語言,使用者的預設語言會變成資料庫的新預設語言。重要事項 DEFAULT_LANGUAGE 只用於自主資料庫使用者。
SID = sid
僅適用於具有密碼之自主資料庫使用者 (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 資料庫中的任何登入不相關。 未列出預設的結構描述和語言選項。
安全性注意事項 |
---|
此語法將資料庫的存取權以及 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 層級。 如需詳細資訊,請參閱<自主資料庫的安全性最佳做法>。
權限
需要資料庫的 ALTER ANY USER 權限。
範例
A.依據 SQL Server 登入建立資料庫使用者
下列範例會先建立一個名為 AbolrousHazem 的 SQL Server 登入,然後在 AdventureWorks2012 建立對應的資料庫使用者 AbolrousHazem。
CREATE LOGIN AbolrousHazem
WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2012;
GO
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO
B.以預設的結構描述建立資料庫使用者
下列範例會先建立一個具有密碼且名叫 WanidaBenshoof 的伺服器登入,然後再以預設的結構描述 Marketing,建立對應的資料庫使用者 Wanida。
CREATE LOGIN WanidaBenshoof
WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2012;
CREATE USER Wanida FOR LOGIN WanidaBenshoof
WITH DEFAULT_SCHEMA = Marketing;
GO
C.從憑證建立資料庫使用者
下列範例會從憑證 CarnationProduction50 建立一個資料庫使用者 JinghaoLiu。
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.建立及使用不含登入的使用者
下列範例會建立未對應至 SQL Server 登入的資料庫使用者 CustomApp。 然後此範例會授與使用者 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.建立具有密碼的自主資料庫使用者
下列範例會建立具有密碼之自主資料庫使用者。 您只能在自主資料庫中執行這個範例。
USE AdventureWorks2012 ;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
, DEFAULT_LANGUAGE=[Brazilian]
, DEFAULT_SCHEMA=[dbo]
GO
F.為網域登入建立自主資料庫使用者
下列範例會為 Contoso 網域中的登入 Fritz,建立自主資料庫使用者。 您只能在自主資料庫中執行這個範例。
USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
GO
G.建立具有指定 SID 之自主資料庫使用者
下列範例會建立名稱為 CarmenW 的 SQL Server 驗證自主資料庫使用者。 您只能在自主資料庫中執行這個範例。
USE AdventureWorks2012 ;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;
請參閱
參考
sys.database_principals (Transact-SQL)