適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 資料庫
將使用者加入目前資料庫中。 以下列表展示了 13 種使用者類型,並附上最基本語法的範例:
Note
雖然 Microsoft Entra ID 是 Azure Active Directory(Azure AD)的新名稱,但為了防止破壞現有的環境,Azure AD 仍會保留在某些硬式編碼元素中,例如 UI 字段、連線提供者、錯誤碼和 Cmdlet。 在本文中,這兩個名稱是可互換的。
以 登入為基礎的使用者 master
具有 Windows Active Directory 帳戶登入的使用者。
CREATE USER [Contoso\test];依據 Windows 群組登入的使用者。
CREATE USER [Contoso\Sales];使用者是基於使用 SQL Server 認證的登入方式。
CREATE USER Mary;根據Microsoft Entra 登入的使用者。
CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com]Note
Microsoft Entra 伺服器主體(登入)目前為 Azure SQL 資料庫 公開預覽狀態。
Note
Microsoft Fabric 中的 SQL 資料庫不支援登入或基於登入的使用者。
在資料庫進行認證的使用者——使用 包含的使用者來提升資料庫的可攜性。
在 Azure SQL Database 中一直被允許。 只有 SQL Server 中的自主資料庫允許。
依據沒有登入之 Windows 使用者的使用者。
CREATE USER [Contoso\test];依據沒有登入之 Windows 群組的使用者。
CREATE USER [Contoso\Sales];SQL 資料庫 或 Azure Synapse Analytics 中的使用者,以 Microsoft Entra 用戶為基礎。
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;具有密碼之自主資料庫使用者。 (無法用於 Azure Synapse Analytics 中)。
CREATE USER Mary WITH PASSWORD = '********';
具有 Windows 主體的使用者,其透過 Windows 群組登入進行連接
以未登入但可透過 Windows 群組的成員資格連線到資料庫引擎的 Windows 使用者為基礎的使用者。
CREATE USER [Contoso\test];以未登入但可透過不同 Windows 群組的成員資格連線到資料庫引擎的 Windows 群組為基礎的使用者。
CREATE USER [Contoso\test];
無法驗證的使用者 - 這些使用者無法登入 SQL Server 或 SQL 資料庫。
- 沒有登入的使用者。 無法登入,但可以獲得權限。
CREATE USER CustomApp WITHOUT LOGIN; - 依據憑證的使用者。 無法登入,但可以授與許可權,而且可以簽署模組。
CREATE USER TestProcess FOR CERTIFICATE Contoso50; - 依據非對稱金鑰的使用者。 無法登入,但可以授與許可權,而且可以簽署模組。
CREATE User TestProcess FROM ASYMMETRIC KEY Contoso09;
Syntax
SQL Server、Azure SQL Database 和 Azure SQL 受控執行個體的語法
-- Syntax Users based on logins in master
CREATE USER user_name
[
{ FOR | FROM } LOGIN login_name
]
[ WITH <limited_options_list> [ , ... ] ]
[ ; ]
-- Users that authenticate at the database
CREATE USER
{
windows_principal [ WITH <options_list> [ , ... ] ]
| user_name WITH PASSWORD = 'password' [ , <options_list> [ , ... ]
| Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH OBJECT_ID = 'objectid' ]
}
[ ; ]
-- 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 <limited_options_list> [ , ... ] ]
[ ; ]
-- Users that cannot authenticate
CREATE USER user_name
{
WITHOUT LOGIN [ WITH <limited_options_list> [ , ... ] ]
| { 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
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name ]
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]
-- Syntax for users based on Microsoft Entra logins for Azure SQL Managed Instance
CREATE USER user_name
[ { FOR | FROM } LOGIN login_name ]
| FROM EXTERNAL PROVIDER
[ WITH <limited_options_list> [ , ... ] ]
[ ; ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name
| DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
Azure Synapse Analytics 的語法
CREATE USER user_name
[ { { FOR | FROM } { LOGIN login_name }
| WITHOUT LOGIN
]
[ WITH DEFAULT_SCHEMA = schema_name ]
[;]
CREATE USER Microsoft_Entra_principal FROM EXTERNAL PROVIDER
[ WITH DEFAULT_SCHEMA = schema_name ]
[;]
Microsoft Fabric 與 Azure SQL 資料庫中 SQL 資料庫的語法
CREATE USER
{
Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH <limited_options_list> [ , ... ] ]
| Microsoft_Entra_principal WITH <options_list> [ , ... ]
}
[ ; ]
-- 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
}
[ ; ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name
| OBJECT_ID = 'objectid'
<options_list> ::=
DEFAULT_SCHEMA = schema_name
| SID = sid
| TYPE = { X | E }
Arguments
user_name
指定在這個資料庫內用來識別使用者的名稱。 user_name 是一種 sysname。 該名稱長度最多可達 128 個字元。 當建立依據 Windows 主體的使用者時,除非指定另一個使用者名稱,否則 Windows 主體名稱會成為使用者名稱。
LOGIN login_name
指定目前建立之資料庫使用者的登入。 login_name 必須是伺服器中的有效登入。 可以是以 Windows 主體(使用者或群組)、使用 SQL Server 驗證的登入,或使用 Microsoft Entra 主體登入(使用者、群組或應用程式)。 當這個 SQL Server 登入進入資料庫時,它會取得正在建立之資料庫使用者的名稱和識別碼。 在建立與 Windows 主體對應的登入時,使用以下格式:[<domainName>\<loginName>]。 如需範例,請參閱語法摘要。
如果該CREATE USER語句是 SQL 批次中唯一的語句,Azure SQL Database 支援 WITH LOGIN 子句。 如果該 CREATE USER 語句不是 SQL 批次中唯一的語句,或是在動態 SQL 中執行,WITH LOGIN 子句就不被支援。
DEFAULT_SCHEMA = schema_name
指定伺服器在解析該資料庫使用者物件名稱時所搜尋的第一個結構。
'windows_principal'
為正在建立的資料庫使用者指定 Windows 主體。 windows_principal 可以是 Windows 使用者或 Windows 群組。 即使 windows_principal 沒有登入,也可以建立使用者。 在連線到 SQL Server 時,如果 windows_principal 沒有登入,則 Windows 主體必須透過具有登入的 Windows 群組成員資格在資料庫引擎中進行驗證,或者,連接字串必須將自主資料庫指定為初始目錄。 從 Windows 主體建立使用者時,使用以下格式:[<domainName>\<loginName>]。 如需範例,請參閱語法摘要。 具有 Active Directory 使用者身分的使用者,其名稱僅限 21 個字元以內。
'Microsoft_Entra_principal'
適用於:SQL Server 2022(16.x)及更新版本、SQL Database、SQL 受管理執行個體、Azure Synapse Analytics、Microsoft Fabric 中的 SQL 資料庫
指定要建立資料庫使用者的Microsoft Entra 主體。 Microsoft_Entra_principal 可以是Microsoft Entra 使用者、Microsoft Entra 群組或 Microsoft Entra 應用程式。 (Microsoft Entra 使用者無法在 SQL 資料庫 中登入 Windows 驗證;只有資料庫使用者。連接字串 必須將自主資料庫指定為初始目錄。
對於 Microsoft Entra 主體,語CREATE USER法要求:
Microsoft Entra 使用者Microsoft Entra 物件的 UserPrincipalName。
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;
Microsoft Entra 伺服器主體 (logins) 引進了建立對應至資料庫中Microsoft Entra 登入
master的使用者。 例如,CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];Microsoft 2048 個以上的 Entra 使用者和服務主體(應用程式)不支援在 Azure Microsoft SQL 資料庫、Azure SQL 受控執行個體 或 Azure Synapse 中登入資料庫。
Microsoft Entra 群組和Microsoft Entra Applications 之 Microsoft Entra 物件的 DisplayName。 如果您有「護士」安全性群組,則可以使用:
CREATE USER [Nurses] FROM EXTERNAL PROVIDER;
如需詳細資訊,請參閱使用 Microsoft Entra 驗證連線到 SQL Database。
如需 SQL Server 中Microsoft Entra 驗證的詳細資訊,請參閱 教學課程:為 Azure Arc 啟用的 SQL Server 設定Microsoft Entra 驗證。
WITH PASSWORD = 'password'
適用於:SQL Server 2012(11.x)及以上版本,SQL 資料庫。
只能用於自主資料庫。 指定正在建立之使用者的密碼。
從 SQL Server 2012(11.x)開始,SQL Server 與 Azure SQL Database 採用 SHA-512 雜湊值,並結合 32 位元隨機且唯一 salt。 此方法在統計上使攻擊者無法推算密碼。
SQL Server 2025(17.x)引入了迭代雜湊演算法 RFC2898,也稱為 基於密碼的金鑰推導函數 (PBKDF)。 此演算法仍然使用SHA-512,但多次哈希密碼(100,000個反覆專案),大幅降低暴力密碼破解攻擊的速度。 這項變更可增強密碼保護,以響應不斷演變的安全性威脅,並協助客戶遵守 NIST SP 800-63b 指導方針。 此安全強化採用更強的雜湊演算法,可能稍微延長 SQL 認證登入時間。 在有連線池的環境中,影響通常較低,但在沒有連線池或對登入延遲有密切監控的情況下,影響可能更明顯。
沒有 LOGIN
指定使用者不得對應到現有的登入。
CERTIFICATE cert_name
適用於:SQL Server 2008(10.0.x)及更新版本、SQL 資料庫、Microsoft Fabric 中的 SQL 資料庫
指定目前建立之資料庫使用者的憑證。
ASYMMETRIC KEY asym_key_name
適用於:SQL Server 2008(10.0.x)及更新版本、SQL 資料庫、Microsoft Fabric 中的 SQL 資料庫
指定目前建立之資料庫使用者的非對稱金鑰。
DEFAULT_LANGUAGE = { NONE | <lcid> | <語言名稱> | <語言別名> }
適用於:SQL Server 2012(11.x)及後版本,SQL 資料庫
指定新使用者的預設語言。 如果你為使用者指定預設語言,之後又更改資料庫的預設語言,使用者的預設語言會維持原定語言。 如果你沒有指定預設語言,使用者就會得到資料庫的預設語言。 如果你沒有為使用者指定預設語言,之後又更改資料庫的預設語言,使用者的預設語言就會變成新的預設語言。
Important
DEFAULT_LANGUAGE 只用於自主資料庫使用者。
SID = SID
適用於:SQL Server 2012(11.x)及以後版本,以及 Microsoft Fabric 中的 SQL 資料庫。
在 SQL Server 2012(11.x)及更新版本中,僅適用於在包含資料庫中擁有密碼(SQL Server 認證)的使用者。 指定新資料庫使用者的 SID。 如果你沒有選擇這個選項,SQL Server 會自動指派一個 SID。 使用 SID 參數即可在多個資料庫中建立具有相同識別 (SID) 的使用者。 此功能在建立多個資料庫的使用者以準備 Always On 故障轉移時非常有用。 要確定使用者的 SID,請查詢 sys.database_principals。
在 Microsoft Fabric 的 SQL 資料庫中, sid 應該是指定之Microsoft Entra 主體的有效標識符。 如果主體是使用者或群組,ID 應該是該使用者或群組的 Microsoft Entra 物件 ID。 如果 Microsoft Entra 主體是服務主體(應用程式或管理身份),那麼 ID 應該是應用程式 ID 或用戶端 ID。 指定的識別碼必須是 binary(16) 值。 資料庫引擎 不會在 Entra Microsoft 中驗證指定的標識碼。 若使用該 SID 論證,必須包含 TYPE。
TYPE = [ E |X ]
適用於:Microsoft Fabric 和 Azure SQL Database 中的 SQL 資料庫。
指定Microsoft Entra 主體的類型。
E 表示主體是用戶或服務主體(應用程式或受控識別)。
X 表示主體是群組。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON |OFF ]
適用於:SQL Server 2016(13.x)及以上版本,SQL 資料庫。
在大量複製作業時隱藏伺服器上的密碼編譯中繼資料檢查。 這會讓使用者得以在資料表或資料庫間大量複製加密資料,而無須解密資料。 預設值為 OFF。
Warning
不當使用這個選項會導致資料損毀。 如需詳細資訊,請參閱移轉透過 Always Encrypted 保護的機密資料。
來自外部供應商
適用於:SQL Server 2022(16.x)及更新版本、SQL 資料庫、Azure SQL 受控執行個體、Microsoft Fabric 中的 SQL 資料庫
指定主體適用於Microsoft Entra 驗證。 SQL Server 會自動驗證Microsoft Entra 中提供的主體名稱。
若發出該語句的主體CREATE USER是 Microsoft Entra 使用者主體,則主體或主體的群組必須在 Microsoft Entra 中擔任目錄讀取者角色。
在 SQL 資料庫 和 Azure SQL 受控執行個體 中,如果發出CREATE USER語句的主體是服務主體,則資料庫伺服器或受控實例的身分識別必須位於 entra Microsoft 的目錄讀取者角色中。
在 Microsoft Fabric 的 SQL 資料庫中,你無法使用FROM EXTERNAL PROVIDER主體CREATE USER發出是否是 Microsoft Entra 中的服務主體。 服務主體必須使用 TYPE 和 SID 自變數來建立Microsoft Entra 主體的使用者。
其中 OBJECT_ID = 「objectid」
適用於:SQL Server 2025(17.x)及更新版本、SQL 資料庫、Azure SQL 受控執行個體、Microsoft Fabric 中的 SQL 資料庫
指定 entra 物件識別碼Microsoft。 如果你指定 , OBJECT_ID可以 user_name 是由原始主顯示名稱加上後綴組成的使用者自訂別名。 user_name在檢視中 sys.database_principals 必須是唯一的名稱,並遵守所有其他 sysname 限制。 欲了解更多使用此WITH OBJECT_ID選項的資訊,請參閱 Microsoft Entra 登入及非唯一顯示名稱使用者。
Note
自 SQL Server 2025(17.x)起, WITH OBJECT_ID 支援 Microsoft Entra 登入及擁有獨特顯示名稱的使用者使用此選項。
如果服務主體的顯示名稱不是重複的,請使用預設 CREATE LOGIN 的 or CREATE USER 陳述式。 延伸 WITH OBJECT_ID 模組是一項疑難解答修復專案,可搭配非統一的服務主體使用。 不建議與獨特的服務主體一起使用。 使用 WITH OBJECT_ID 服務主體的擴充功能而不加後綴是可以成功執行的,但不清楚該登入或使用者是為哪位服務主體建立的。 建議使用後綴建立別名,以唯一識別服務主體。
Remarks
如果你省略FOR LOGIN了 ,新的資料庫使用者會對應到同名的 SQL Server 登入帳號。
預設結構是伺服器在解析該資料庫使用者物件名稱時,首先搜尋的架構。 除非另有說明,預設結構為該資料庫使用者所建立物件的擁有者。
如果使用者有預設架構,伺服器就會使用該預設架構。 如果使用者沒有預設架構,但屬於有預設架構的群組成員,伺服器會使用該群組的預設架構。 如果使用者沒有預設架構且屬於多個群組,伺服器會使用Windows群組中設定的預設架構,該群組中結構數最低principal_id的群組,這些群組中有明確設定預設架構。 你不能明確選擇可用的預設結構作為首選模式。 如果伺服器無法判斷使用者的預設結構,它就會使用該 dbo 架構。
你可以在建立它指向的結構前先設定 DEFAULT_SCHEMA 。
你無法在建立使用者時指定 DEFAULT_SCHEMA 對應到憑證或非對稱金鑰。
如果使用者是固定伺服器角色的成員sysadmin,伺服器會忽略 的DEFAULT_SCHEMA值。 所有固定伺服器角色的 sysadmin 成員預設結構為 dbo。
這個 WITHOUT LOGIN 條款會建立一個沒有映射到 SQL 認證登入的使用者。 這個使用者可以用 guest 的身分連接到其他資料庫。 你可以在不登入的情況下指派權限給這個使用者。 當安全情境切換為未登入使用者時,原始使用者將獲得該使用者的權限,無需登入。 舉例請見 D. 建立並使用無登入的使用者。
只有對應到 Windows 主體的使用者可以包含反斜線字元 ( \ )。
你無法用 CREATE USER 來建立訪客使用者,因為訪客使用者已經存在於每個資料庫中。 你可以透過授權 CONNECT 來啟用訪客使用者,如圖所示:
GRANT CONNECT TO guest;
GO
您可以在 sys.database_principals 目錄檢視中查看資料庫使用者的資訊。
使用語法延伸模組FROM EXTERNAL PROVIDER在 Azure SQL 資料庫 和 Azure SQL 受控執行個體 中建立伺服器層級Microsoft Entra 登入。 透過使用 Microsoft Entra 登入,你可以將資料庫層級的 Microsoft Entra 主體映射到伺服器層級的 Microsoft Entra 登入。 要從 Microsoft Entra 登入建立 Microsoft Entra 使用者,請使用以下語法:
CREATE USER [Microsoft_Entra_principal] FROM LOGIN [Microsoft Entra login];
當你在Azure SQL資料庫中建立使用者時,login_name必須對應現有的Microsoft Entra登入。 否則,使用該FROM EXTERNAL PROVIDER條款只會產生一個沒有資料庫登入master的 Microsoft Entra 使用者。 例如,以下指令會建立一個包含的使用者:
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
語法摘要
以 登入為基礎的使用者 master
下列清單顯示依據登入之使用者的可能語法。 未列出預設的結構描述選項。
CREATE USER [Domain1\WindowsUserTest]CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTestCREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTestCREATE USER [Domain1\WindowsGroupManagers]CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]CREATE USER SQLAUTHLOGINCREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGINCREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN
在資料庫進行驗證的使用者
下列清單顯示只能用於自主資料庫使用者的可能語法。 建立的使用者將不會與 master 資料庫中的任何登入相關。 未列出預設的結構描述和語言選項。
Important
此語法會將資料庫的存取權及資料庫引擎的新存取權授與使用者。
CREATE USER [Domain1\WindowsUserTest]CREATE USER [Domain1\WindowsGroupManagers]CREATE USER Test WITH PASSWORD = '<strong password>'
以 Windows 主體為基礎的使用者,而不需在 master 系統資料庫中登入
下列清單顯示可透過 Windows 群組存取 資料庫引擎 但系統資料庫中沒有登入master的使用者可能語法。 這個語法可以用於所有類型的資料庫。 未列出預設的結構描述和語言選項。
此語法類似於以 中的 master登入為基礎的使用者,但此類別的使用者在 中 master沒有登入。 使用者必須能夠透過 Windows 群組登入來存取資料庫引擎。
此語法與以 Windows 主體為基礎的自主資料庫使用者類似,但此類別的使用者沒有資料庫引擎的新存取權。
CREATE USER [Domain1\WindowsUserTest]CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTestCREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTestCREATE 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 LOGINCREATE USER CERTUSER FOR CERTIFICATE SpecialCertCREATE USER CERTUSER FROM CERTIFICATE SpecialCertCREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKeyCREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey
安全性
建立使用者會授與對資料庫的存取權,但不會自動授與任何對資料庫物件的存取權。 在建立使用者之後,一般動作是將使用者新增至有權存取資料庫物件的資料庫角色,或將物件權限授與給使用者。 如需設計權限系統的資訊,請參閱 資料庫引擎權限使用者入門。
包含資料庫的特殊考量
連接到自主資料庫時,如果使用者在資料庫中沒有登入master,則 連接字串 必須包含自主資料庫名稱做為初始目錄。 具有密碼之自主資料庫使用者永遠需要初始目錄參數。
在自主資料庫中,建立使用者有助於區隔資料庫與資料庫引擎的執行個體,如此便可輕易地將資料庫移至另一個 SQL Server 執行個體。 如需詳細資訊,請參閱自主資料庫和自主的資料庫使用者 - 使資料庫可攜。 若要將資料庫使用者從基於 SQL 認證登入的使用者變更為包含的資料庫使用者並使用密碼,請參見 sp_migrate_user_to_contained (Transact-SQL)。
在自主資料庫中,使用者不需要在 master 資料庫中擁有登入。 資料庫引擎管理員應該了解對自主資料庫的存取權可以在資料庫層級授與,而非資料庫引擎層級。 如需詳細資訊,請參閱 Security Best Practices with Contained Databases。
當您在 Azure SQL Database 上使用自主資料庫使用者時,使用資料庫層級防火牆規則來設定存取權,而非使用伺服器層級防火牆規則。 如需詳細資訊,請參閱 sp_set_database_firewall_rule (Azure SQL Database)。
對於 SQL Server 2022 (16.x)、Azure SQL Database、Azure SQL 受控執行個體 以及包含 Azure Synapse Analytics 的資料庫使用者,SSMS 支援多重認證。 如需詳細資訊,請參閱使用 Microsoft Entra 多重要素驗證。
Permissions
需要更改資料庫上的任何 USER 權限。
SQL Server 2022 及更新版本的權限
需要資料庫的 CREATE USER 權限。
Examples
A. 根據 SQL Server 登入建立資料庫使用者
以下範例首先建立一個在資料庫中命名test的 SQL Server 登入,然後在 中建立對應的資料庫使用者testAdventureWorks2025。master
--Connect to the master database
CREATE LOGIN test
WITH PASSWORD = '<strong password>';
變更為使用者資料庫。 例如,在 SQL Server 中使用 USE [AdventureWorks2022] 陳述式。 在 Azure SQL Database 中,該USE語句無法取得。 相反地,直接連接到預期的資料庫,執行剩餘的程式碼範例。 這個基於登入的範例不適用於 Microsoft Fabric 中的 SQL 資料庫,因為它不支援登入或基於登入的使用者。
--Connect to a user database
CREATE USER test FOR LOGIN test;
GO
B. 建立一個帶有預設結構的資料庫使用者
以下範例首先建立一個伺服器登入 testlogin ,並以你提供的密碼命名,然後建立對應的資料庫使用者 testuser,預設架構 Marketing為 。
--Connect to the master database
CREATE LOGIN testlogin
WITH PASSWORD = '<strong password>';
變更為使用者資料庫。 例如,在 SQL Server 中使用 USE [AdventureWorks2022] 陳述式。 在 Azure SQL Database 和 Microsoft Fabric 中的 SQL 資料庫中,這個USE語句都無法使用。 相反地,直接連接到預期的資料庫,執行剩餘的程式碼範例。
--Connect to a user database
CREATE USER testuser FOR LOGIN testlogin
WITH DEFAULT_SCHEMA = Marketing;
C. 從憑證建立資料庫使用者
下列範例會從憑證 test 建立一個資料庫使用者 Contoso_Cert。 欲了解更多資訊,請參見 CREATE CERTIFICATE (Transact-SQL)。
USE AdventureWorks2022;
CREATE CERTIFICATE Contoso_Cert
ENCRYPTION BY PASSWORD = '<strong password>'
WITH SUBJECT = 'Contoso Facility Supervisors',
EXPIRY_DATE = '11/11/2011';
GO
CREATE USER test FOR CERTIFICATE Contoso_Cert;
GO
D. 建立並使用一個沒有登入的使用者
下列範例會建立未對應到 SQL Server 登入的資料庫使用者 CustomApp。 然後此範例會授與使用者 adventure-works\test 權限來模擬 CustomApp 使用者。
USE AdventureWorks2022;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\test] ;
GO
若要使用 CustomApp 認證,使用者 adventure-works\test 會執行下列陳述式。
EXECUTE AS USER = 'CustomApp' ;
GO
若要還原回 adventure-works\test 認證,使用者會執行下列陳述式。
REVERT ;
GO
E. 建立一個包含的資料庫使用者並有密碼
下列範例會建立具有密碼之自主資料庫使用者。 此範例只能在包含的資料庫中執行。
這個範例在 SQL 資料庫中是可行的,如果你移除 DEFAULT_LANGUAGE。
USE AdventureWorks2022;
GO
CREATE USER test
WITH PASSWORD='<password>'
, DEFAULT_LANGUAGE=[Brazilian]
, DEFAULT_SCHEMA=[dbo]
GO
F. 建立一個包含的資料庫使用者以進行網域登入
以下範例為網域名稱testContoso為 的登入建立包含的資料庫使用者。 此範例只能在包含的資料庫中執行。
USE AdventureWorks2022;
GO
CREATE USER [Contoso\test] ;
GO
G. 建立一個包含特定 SID 的資料庫使用者
以下範例建立一個經 SQL Server 認證的包含資料庫使用者,名為 TestUser。 此範例只能在包含的資料庫中執行。
USE AdventureWorks2022;
GO
CREATE USER TestUser WITH PASSWORD = '<strong password>'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;
H. 建立一個使用者來複製加密資料
下列範例會建立一位使用者,以將受 Always Encrypted 功能保護的資料,從某一組資料表 (包含加密資料行) 複製到另一組具有加密資料行的資料表 (位於相同或不同的資料庫)。 如需詳細資訊,請參閱移轉透過 Always Encrypted 保護的機密資料。
適用於:SQL Server 2016(13.x)及以上版本,SQL 資料庫。
CREATE USER [test]
WITH
DEFAULT_SCHEMA = dbo
, ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON ;
I. 喺 Azure SQL Database 和 Azure SQL 受控執行個體 從 Microsoft Entra 登入建立 Microsoft Entra 用戶
若要從 Microsoft Entra 登入建立 Microsoft Entra 使用者,請使用下列語法:
使用 Microsoft Entra 登入你的 Azure SQL Database 邏輯伺服器或 SQL 受管理執行個體。 使用伺服器管理員登入帳號,或是 SQL 資料庫中該角色成員loginmanager,或在 SQL 受管理執行個體 中被授予的角色sysadmin登入帳號。
下列 T-SQL 文稿會從 登入 test@contoso.com建立 Microsoft Entra 使用者 test@contoso.com。 這個登入是在範例 CREATE LOGIN 中建立的。
CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];
GO
Important
從Microsoft Entra登入建立 a USER 時,請指定 user_name 為相同的login_name。LOGIN
支援從Microsoft Entra 登入建立Microsoft Entra 用戶作為群組。
CREATE USER [MS Entra group] FROM LOGIN [MS Entra group];
GO
您也可以從群組Microsoft Entra 登入建立Microsoft Entra 使用者。
CREATE USER [test@contoso.com] FROM LOGIN [MS Entra group];
GO
J. 從 Microsoft Entra 主體建立自主資料庫使用者
下列語法會在資料庫中建立 Microsoft Entra 使用者 test@contoso.com,而資料庫中沒有相關聯的登入 master。 資料庫引擎 會驗證指定的使用者存在於 entra Microsoft。
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
GO
在 Microsoft Fabric 的 SQL 資料庫中,你無法使用FROM EXTERNAL PROVIDER主體CREATE USER發出是否是 Microsoft Entra 中的服務主體。
K. 從 Microsoft Entra 主體建立自主資料庫使用者,而不需驗證
適用於:Microsoft Fabric 中的 SQL 資料庫及 Azure SQL 資料庫
本節中的範例會建立 Microsoft Entra 主體的資料庫使用者,而不驗證 entra Microsoft 中的主體名稱。
下列 T-SQL 範例會為名為 test@contoso.com的 Microsoft Entra 使用者建立資料庫使用者。 以新使用者的 SID 取代 <unique identifier sid> 為 Microsoft Entra 使用者的物件識別碼。
DECLARE @principal_name SYSNAME = 'test@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);
下列範例會為名為 HRApp的 Microsoft Entra 服務主體建立資料庫使用者。 將取代 <unique identifier sid> 為 Microsoft Entra 中服務主體用戶端識別碼的新使用者的 SID。
Note
在指定Microsoft Entra服務主體時,請使用用戶端 ID,而非物件 ID,User-Assigned 管理身份(UAMI)或 System-Assigned 受管理身份(SAMI)。
DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);
下列範例會為名為 HR的 Microsoft Entra 群組建立資料庫使用者。 以新使用者的 SID 取代 <unique identifier sid> 為群組的物件識別碼。
DECLARE @principal_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);