CREATE LOGIN (Transact-SQL)
建立 SQL Server、Azure SQL 資料庫、Azure SQL 受控執行個體、Azure Synapse Analytics 或 Analytics Platform System 資料庫的登入。 針對特定版本的語法、自變數、備註、許可權和範例,選擇下列其中一個索引標籤。
CREATE LOGIN 會參與交易。 如果在交易內執行 CREATE LOGIN 並復原交易,將會復原建立登入作業。 如果在交易內執行,則在認可交易之前,無法使用建立的登入。
注意
Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。
如需語法慣例的詳細資訊,請參閱 Transact-SQL 語法慣例。
選取產品
在以下資料列中,選取您感興趣的產品名稱,隨即只會顯示該產品的資訊。
* SQL Server *
SQL Server
語法
-- Syntax for SQL Server
CREATE LOGIN login_name { WITH <option_list1> | FROM <sources> }
<option_list1> ::=
PASSWORD = { 'password' | hashed_password HASHED } [ MUST_CHANGE ]
[ , <option_list2> [ ,... ] ]
<option_list2> ::=
SID = sid
| DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
| CHECK_EXPIRATION = { ON | OFF}
| CHECK_POLICY = { ON | OFF}
| CREDENTIAL = credential_name
<sources> ::=
WINDOWS [ WITH <windows_options>[ ,... ] ]
| EXTERNAL PROVIDER
| CERTIFICATE certname
| ASYMMETRIC KEY asym_key_name
<windows_options> ::=
DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
引數
login_name
指定建立的登入名稱。 登入有五種類型:SQL Server 登入、Windows 登入、Microsoft Entra 登入、憑證對應登入,以及非對稱密鑰對應登入。
當您建立從 Windows 網域帳戶對應的登入時,必須使用 [<domainName>\<login_name>] 格式的登入名稱。 您無法使用 login_name@DomainName 格式的 UPN。 如需範例,請參閱 本文稍後的範例 E 。 驗證登入的類型為 sysname,且必須符合標識符的規則,且不能包含反斜杠 ()。 Windows 登入可以包含 ' \ '。 以 Active Directory 用戶為基礎的登入限制為少於 21 個字元的名稱。
使用 FROM EXTERNAL PROVIDER 子句時,登入名稱必須符合SQL實例啟用Arc之相同租用戶中現有Microsoft Entra 主體的顯示名稱。 Microsoft Entra 使用者、群組和應用程式可用來建立登入。
PASSWORD ='password'
僅適用於 SQL Server 登入。 指定要建立的登入密碼。 請使用增強式密碼。 如需詳細資訊,請參閱強式密碼和密碼原則。 從 SQL Server 2012 (11.x) 開始,預存密碼資訊會使用加料式 (Salted) 密碼的 SHA-512 加以計算。
密碼會區分大小寫。 密碼長度應一律至少為8個字元,且不能超過128個字元。 密碼可以包含 a-z、A-Z、0-9 及大多數非英數字元。 密碼不能包含單引號或 login_name。
PASSWORD = hashed_password
僅適用於 HASHED 關鍵字。 指定要建立之登入的密碼雜湊值。
HASHED
僅適用於 SQL Server 登入。 指定在 PASSWORD 引數之後輸入的密碼已雜湊處理。 如果未選取此選項,輸入為密碼的字串會在儲存在資料庫中之前進行哈希處理。 只有要在兩部伺服器之間移轉資料庫時,才應使用這個選項。 請勿使用HASHED選項來建立新的登入。 HASHED 選項無法與 SQL 7 或更早版本所建立的哈希搭配使用。
MUST_CHANGE
僅適用於 SQL Server 登入。 如果有包含這個選項,第一次使用新登入時,SQL Server 會提示使用者輸入新密碼。
CREDENTIAL =credential_name
對應到新 SQL Server 登入的認證名稱。 認證必須已存在於伺服器中。 目前這個選項只會將認證連結到登入。 認證無法對應至系統管理員登入。
SID = sid
用來重新建立登入。 僅適用於 SQL Server 驗證登入,不適用於 Windows 驗證登入。 指定新 SQL Server 驗證登入的 SID。 如果未使用這個選項,SQL Server 將自動指派 SID。 SID 結構取決於 SQL Server 版本。 SQL Server 登入 SID:以 GUID 為基礎的 16 位元組 (binary(16) ) 常值。 例如: SID = 0x14585E90117152449347750164BA00A7
。
DEFAULT_DATABASE =database
指定要指派給登入的預設資料庫。 如果未包含這個選項,預設資料庫會設定為 master
。
DEFAULT_LANGUAGE =language
指定要指派給登入的預設語言。 如果未包含此選項,預設語言會設定為伺服器目前的默認語言。 如果伺服器的預設語言在未來有所變更,登入的預設語言會保持不變。
CHECK_EXPIRATION = { ON |OFF }
僅適用於 SQL Server 登入。 指定是否應該對這個登入強制執行密碼逾期原則。 預設值是 OFF。
CHECK_POLICY = { ON |OFF }
僅適用於 SQL Server 登入。 指定應該在這項登入上強制使用執行 SQL Server 之電腦的 Windows 密碼原則。 預設值是 ON。
如果 Windows 原則要求增強式密碼,則密碼必須至少包含下列四個特性的其中三個:
- 大寫字元 (A-Z)。
- 小寫字元 (a-z)。
- 數字 (0-9)。
- 其中一個非虛構字元,例如空格、_、@、*、^、%、!、$、#或 &。
WINDOWS
指定登入對應到 Windows 登入。
從外部提供者
指定登入對應至Microsoft Entra 主體。 此選項適用於已啟用 Arc 的 SQL Server 2022 和更新版本。 如需詳細資訊,請參閱 Microsoft SQL Server 的 Entra 驗證
CERTIFICATE certname
指定與這項登入相關聯的憑證名稱。 此憑證必須已在資料庫中發生 master
。
ASYMMETRIC KEY asym_key_name
指定與這項登入相關聯的非對稱金鑰名稱。 此金鑰必須已在資料庫中發生 master
。
備註
- 密碼會區分大小寫。
- 只有在建立 SQL Server 登入時,才支援密碼預先隱藏。
- 如果
MUST_CHANGE
指定了 ,則必須將 CHECK_EXPIRATION 和 CHECK_POLICY 設定為ON
。 否則,陳述式便會失敗。 - 不支援和
CHECK_EXPIRATION = ON
的組合CHECK_POLICY = OFF
。 - 當CHECK_POLICY設定為
OFF
時, lockout_time 會重設,且CHECK_EXPIRATION
設定為OFF
。
重要
CHECK_EXPIRATION和CHECK_POLICY只會在 Windows Server 2003 和更新版本上強制執行。 如需詳細資訊,請參閱< Password Policy>。
- 從憑證或非對稱金鑰建立的登入只能用於程式碼簽章。 它們無法用來連線到 SQL Server。 只有當憑證或非對稱密鑰已經存在
master
時,您才能從憑證或非對稱密鑰建立登入。 - 如需傳送登入的指令碼,請參閱 如何在 SQL Server 2005 和 SQL Server 2008 的執行個體之間傳送登入和密碼。
- 建立登入會自動啟用新登入,並授與登入伺服器層級的 CONNECT SQL 權限。
- 伺服器的驗證模式必須符合登入類型,以允許存取。
- 如需設計權限系統的資訊,請參閱 資料庫引擎權限使用者入門。
權限
- 只有具備伺服器的 ALTER ANY LOGIN 權限或 securityadmin 固定伺服器角色之成員資格的使用者才能建立登入。 如需詳細資訊,請參閱伺服器層級角色和 ALTER SERVER ROLE。
- 如果使用 CREDENTIAL 選項,則也需要伺服器的 ALTER ANY CREDENTIAL 權限。
SQL Server 2022 和更新版本的權限
需要伺服器的 CREATE LOGIN 許可權,或 ##MS_LoginManager## 固定伺服器角色的成員資格。
建立登入之後
建立登入之後,登入就可以連線至 SQL Server,但是只會取得 public 角色的權限。 請考慮執行下列其中一些活動。
- 若要連接至資料庫,請建立用於登入的資料庫使用者。 如需詳細資訊,請參閱 CREATE USER。
- 使用 CREATE SERVER ROLE 建立使用者定義的伺服器角色。 使用
ALTER SERVER ROLE ... ADD MEMBER
將新的登入新增至使用者定義的伺服器角色。 如需詳細資訊,請參閱 CREATE SERVER ROL 和 ALTER SERVER ROLE。 - 使用
sp_addsrvrolemember
將登入新增至固定伺服器角色。 如需詳細資訊,請參閱伺服器層級角色和 sp_addsrvrolemember。 - 使用 GRANT 陳述式將伺服器層級權限授與新登入或包含登入的角色。 如需詳細資訊,請參閱 GRANT。
範例
A. 使用密碼建立登入
下列範例會針對特定的使用者建立登入,並指派密碼。
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO
B. 使用必須變更的密碼建立登入
下列範例會針對特定的使用者建立登入,並指派密碼。 MUST_CHANGE
選項需要使用者在第一次連接到伺服器時變更這個密碼。
適用於:SQL Server 2008 (10.0.x) 和更新版本。
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>'
MUST_CHANGE, CHECK_EXPIRATION = ON;
GO
注意
當 CHECK_EXPIRATION 為 OFF 時,不可使用 MUST_CHANGE 選項。
C. 建立對應至認證的登入
下列範例會針對特定使用者建立登入 (透過使用者)。 此登入會對應到認證。
適用於:SQL Server 2008 (10.0.x) 和更新版本。
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>',
CREDENTIAL = <credentialName>;
GO
D. 從憑證建立登入
下列範例會從 中的 master
憑證建立特定使用者的登入。
適用於:SQL Server 2008 (10.0.x) 和更新版本。
USE MASTER;
CREATE CERTIFICATE <certificateName>
WITH SUBJECT = '<login_name> certificate in master database',
EXPIRY_DATE = '12/05/2025';
GO
CREATE LOGIN <login_name> FROM CERTIFICATE <certificateName>;
GO
E. 從 Windows 網域帳戶建立登入
下列範例會從 Windows 網域帳戶建立登入。
適用於:SQL Server 2008 (10.0.x) 和更新版本。
CREATE LOGIN [<domainName>\<login_name>] FROM WINDOWS;
GO
F. 從 SID 建立登入
下列範例會先建立 SQL Server 驗證登入,並判斷登入的 SID。
CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';
SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO
我的查詢會傳回 0x241C11948AEEB749B0D22646DB1A19F2 作為 SID。 您的查詢將傳回不同的值。 下列陳述式會刪除登入,並重新建立登入。 使用來自前一個查詢的 SID。
DROP LOGIN TestLogin;
GO
CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;
SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO
G. 建立具有多個自變數的登入
下例示範如何在各引數間使用逗號串連引數。
CREATE LOGIN [MyUser]
WITH PASSWORD = 'MyPassword',
DEFAULT_DATABASE = MyDatabase,
CHECK_POLICY = OFF,
CHECK_EXPIRATION = OFF ;
H. 使用哈希密碼建立 SQL 登入
下列範例示範如何使用與移轉案例中現有登入相同的密碼來建立 SQL 登入。 第一個步驟是從來源資料庫伺服器上的現有登入擷取密碼雜湊。 然後,相同的雜湊將用來在新資料庫伺服器上建立登入。 如此一來,新的登入將會有與舊伺服器上相同的密碼。
-- run this to retrieve the password hash for an individual Login:
SELECT LOGINPROPERTY('Andreas','PASSWORDHASH') AS password_hash;
-- as an alternative, the catalog view sys.sql_logins can be used to retrieve the password hashes for multiple accounts at once. (This could be used to create a dynamic sql statemnt from the result set)
SELECT name, password_hash
FROM sys.sql_logins
WHERE
principal_id > 1 -- excluding sa
AND
name NOT LIKE '##MS_%##' -- excluding special MS system accounts
-- create the new SQL Login on the new database server using the hash of the source server
CREATE LOGIN Andreas
WITH PASSWORD = 0x02000A1A89CD6C6E4C8B30A282354C8EA0860719D5D3AD05E0CAE1952A1C6107A4ED26BEBA2A13B12FAB5093B3CC2A1055910CC0F4B9686A358604E99BB9933C75B4EA48FDEA HASHED;
I. 建立 Microsoft Entra 使用者的登入
下列範例會建立Microsoft Entra 帳戶的登入,該帳戶 joe@contoso.onmicrosoft.com 存在於名為 contoso 的 Microsoft Entra 租使用者中。
CREATE LOGIN [joe@contoso.onmicrosoft.com] FROM EXTERNAL PROVIDER
GO
J. 建立同盟Microsoft Entra 帳戶的登入
下列範例會為租用戶中名為 contoso 的同盟Microsoft Entra 帳戶bob@contoso.com建立登入。 使用者 bob 也可以是來賓使用者。
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
GO
K. 建立Microsoft Entra 群組的登入
下列範例會為租使用者 contoso 中存在的 Microsoft Entra 群組 mygroup 建立登入。
CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
GO
L. 建立 Microsoft Entra 應用程式的登入
下列範例會為租使用者 contoso 中存在的 Microsoft Entra 應用程式 myapp 建立登入。
CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER
相關內容
* Azure SQL Database *
SQL Database
如需 Azure SQL 資料庫 連線能力與授權的詳細資訊,請參閱:
語法
-- Syntax for Azure SQL Database
CREATE LOGIN login_name
{
FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid']
| WITH <option_list> [,..]
}
<option_list> ::=
PASSWORD = { 'password' }
[ , SID = sid ]
引數
login_name
注意
Microsoft Entra 伺服器主體(登入)目前為 Azure SQL 資料庫 公開預覽狀態。
當與FROM EXTERNAL PROVIDER子句搭配使用時,登入會指定 Microsoft Entra 主體,這是Microsoft Entra 使用者、群組或應用程式。 否則,登入表示所建立的 SQL 登入名稱。
Microsoft Entra 使用者和服務主體屬於超過 2048 個Microsoft Entra 安全組的成員不支援在 SQL 資料庫、SQL 受管理執行個體 或 Azure Synapse 中登入資料庫。
從外部提供者
指定登入適用於 Microsoft Entra 驗證。
WITH OBJECT_ID = 'objectid'
指定 entra 物件識別碼Microsoft。 OBJECT_ID
如果指定 ,則不需要login_name,即可符合Microsoft Entra 顯示名稱。 login_name在檢視中 sys.server_principals
必須是唯一的名稱,並遵守所有其他 sysname
限制。 如需使用 WITH OBJECT_ID
選項的詳細資訊,請參閱 Microsoft Entra 登入和具有非唯一顯示名稱的使用者。
注意
如果服務主體顯示名稱未重複,則應該使用預設的 CREATE LOGIN
或 CREATE USER
陳述式。 延伸 WITH OBJECT_ID
模組是一項疑難解答修復專案,可搭配非統一的服務主體使用。 不建議將其與唯一的服務主體搭配使用。 使用服務主體的 WITH OBJECT_ID
延伸項目而不新增尾碼將會成功執行,但所建立登入或使用者對應的服務主體並不明顯。 建議使用尾碼建立別名,以唯一標識服務主體。 SQL Server 不支援 WITH OBJECT_ID
延伸項目。
PASSWORD ='password'
指定要建立的 SQL 登入密碼。 請使用增強式密碼。 如需詳細資訊,請參閱強式密碼和密碼原則。 從 SQL Server 2012 (11.x) 開始,預存密碼資訊會使用加料式 (Salted) 密碼的 SHA-512 加以計算。
密碼會區分大小寫。 密碼長度應一律至少為8個字元,且不能超過128個字元。 密碼可以包含 a-z、A-Z、0-9 及大多數非英數字元。 密碼不能包含單引號或 login_name。
SID = sid
用來重新建立登入。 僅適用於 SQL Server 驗證登入,不適用於 Windows 驗證登入。 指定新 SQL Server 驗證登入的 SID。 如果未使用此選項,SQL Server 會自動指派 SID。 SID 結構取決於 SQL Server 版本。 對於 SQL Database,這通常是由 0x01060000000000640000000000000000
再加上代表 GUID 的 16 位元組組成的 32 位元組 (binary(32) ) 常值。 例如: SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7
。
備註
- 密碼會區分大小寫。
- 建立登入會自動啟用新登入,並授與登入伺服器層級的 CONNECT SQL 權限。
重要
如需在 Azure SQL Database 中使用登入和使用者的資訊,請參閱管理 Azure SQL Database 中的登入 (機器翻譯)。
登入
SQL 資料庫 登入
CREATE LOGIN 陳述式必須是批次中唯一的陳述式。
在連線至 SQL Database 的一些方法中 (例如 sqlcmd),您必須使用 <login>@<server> 標記法,將 SQL Database 伺服器名稱附加至連接字串中的登入名稱。 例如,如果您的登入為 login1
,且 SQL Database 伺服器的完整名稱為 servername.database.windows.net
,則連接字串的 username 參數應該是 login1@servername
。 由於 username 參數的總長度為 128 個字元,因此 login_name 的限制為 127 個字元減去伺服器名稱的長度。 在此範例中,login_name
的長度只能是 117 個字元,因為 servername
為 10 個字元。
在 SQL 資料庫 中,您必須使用適當的許可權連線到master
資料庫,才能建立登入。 如需詳細資訊,請參閱建立其他登入和具有系統管理權限的使用者 (機器翻譯)。
SQL Server 規則可讓您以 loginname@<servername>> 格式<建立 SQL Server 驗證登入。 如果您的 SQL Database 伺服器是 myazureserver 且您的登入為 myemail@contoso.com,則您必須以 myemail@contoso.com@myazureserver 提供登入。
在 SQL Database 中,驗證連線需要登入資料,且伺服器層級防火牆規則會暫時快取在每個資料庫中。 此快取會定期重新整理。 若要重新整理驗證快取,並確定資料庫擁有登入資料表的最新版本,請執行 DBCC FLUSHAUTHCACHE。
權限
只有伺服器層級主體登入(由布建程式建立)或資料庫中資料庫角色master
的成員loginmanager
才能建立新的登入。 如需詳細資訊,請參閱建立其他登入和具有系統管理權限的使用者 (機器翻譯)。
範例
A. 使用密碼建立登入
下列範例會針對特定的使用者建立登入,並指派密碼。 master
連接到資料庫,然後使用下列程式代碼範例。
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO
B. 從 SID 建立登入
下列範例會先建立 SQL Server 驗證登入,並判斷登入的 SID。 master
連接到資料庫,然後使用下列程式代碼範例。
CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';
SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO
我的查詢會傳回 0x241C11948AEEB749B0D22646DB1A19F2 作為 SID。 您的查詢將傳回不同的值。 下列陳述式會刪除登入,並重新建立登入。 使用來自前一個查詢的 SID。
DROP LOGIN TestLogin;
GO
CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;
SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO
C. 使用 Microsoft Entra 帳戶建立登入
此範例會使用存在於名為 的 Microsoft Entra 網域contoso
中之使用者的bob@contoso.com
認證,在 Azure SQL 邏輯伺服器中建立登入。 master
連接到資料庫,然後使用下列程式代碼範例。
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER;
GO
D. 使用物件標識碼建立具有別名的登入
您可以指定 Microsoft Entra 服務主體或群組的物件識別碼,為您的 login_name 建立別名。 master
連接到資料庫,然後使用下列程式代碼範例。
CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
WITH OBJECT_ID='4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx';
如需取得服務主體對象標識碼的詳細資訊,請參閱 Microsoft Entra ID 中的服務主體物件。
相關內容
* Azure SQL
受控執行個體 *
Azure SQL 受控執行個體
語法
-- Syntax for Azure SQL Managed Instance
CREATE LOGIN login_name [FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid'] ] { WITH <option_list> [,..]}
<option_list> ::=
PASSWORD = {'password'}
| SID = sid
| DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
引數
login_name
當與FROM EXTERNAL PROVIDER子句搭配使用時,登入會指定 Microsoft Entra 主體,這是Microsoft Entra 使用者、群組或應用程式。 否則,登入表示所建立的 SQL 登入名稱。
Microsoft Entra 使用者和服務主體屬於超過 2048 個Microsoft Entra 安全組的成員,不支援在 Azure SQL 資料庫、Azure SQL 受控執行個體 或 Azure Synapse 中登入資料庫。
FROM EXTERNAL PROVIDER
指定登入適用於 Microsoft Entra 驗證。
WITH OBJECT_ID = 'objectid'
指定 entra 物件識別碼Microsoft。 OBJECT_ID
如果指定 ,則login_name可以是由原始主體顯示名稱所組成的使用者定義別名,後面加上後綴。 login_name在檢視中 sys.server_principals
必須是唯一的名稱,並遵守所有其他 sysname
限制。 如需使用 WITH OBJECT_ID
選項的詳細資訊,請參閱 Microsoft Entra 登入和具有非唯一顯示名稱的使用者。
注意
如果服務主體顯示名稱未重複,則應該使用預設的 CREATE LOGIN
或 CREATE USER
陳述式。 WITH OBJECT_ID
延伸項目處於公開預覽狀態,而且是實作以搭配非唯一服務主體的疑難排解修復項目。 不需要將它與唯一的服務主體搭配使用。 使用服務主體的 WITH OBJECT_ID
延伸項目而不新增尾碼將會成功執行,但所建立登入或使用者對應的服務主體並不明顯。 建議使用尾碼建立別名,以唯一標識服務主體。 SQL Server 不支援 WITH OBJECT_ID
延伸項目。
PASSWORD = 'password'
指定要建立的 SQL 登入密碼。 請使用增強式密碼。 如需詳細資訊,請參閱強式密碼和密碼原則。 從 SQL Server 2012 (11.x) 開始,預存密碼資訊會使用加料式 (Salted) 密碼的 SHA-512 加以計算。
密碼會區分大小寫。 密碼長度應一律至少為10個字元,且不能超過128個字元。 密碼可以包含 a-z、A-Z、0-9 及大多數非英數字元。 密碼不能包含單引號或 login_name。
SID = sid
用來重新建立登入。 僅適用於 SQL Server 驗證登入。 指定新 SQL Server 驗證登入的 SID。 如果未使用此選項,SQL Server 會自動指派 SID。 SID 結構取決於 SQL Server 版本。 對於 SQL Database,這通常是由 0x01060000000000640000000000000000
再加上代表 GUID 的 16 位元組組成的 32 位元組 (binary(32) ) 常值。 例如: SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7
。
備註
語法
FROM EXTERNAL PROVIDER
會建立對應至 entra 帳戶Microsoft的伺服器層級主體指定時
FROM EXTERNAL PROVIDER
:login_name必須代表目前 Azure SQL 受控執行個體 在Microsoft Entra標識符中存取的現有Microsoft Entra 帳戶(使用者、群組或應用程式)。 針對 Microsoft Entra 主體,CREATE LOGIN 語法需要:
Microsoft Entra 使用者Microsoft Entra 物件的 UserPrincipalName。
Microsoft Entra 群組和應用程式的 Microsoft Entra 物件的 DisplayName。
無法使用PASSWORD選項。
根據預設,當省略 子句時
FROM EXTERNAL PROVIDER
,會建立一般 SQL 登入。Microsoft Entra 登入會顯示在 中
sys.server_principals
,並將類型數據行值設定為E
,並type_desc
設定為 EXTERNAL_LOGIN,用於對應至 entra 使用者的登入,或輸入設定為的數據行值,並將type_desc
值設定X
為 EXTERNAL_GROUP,以便對應 Microsoft至 Microsoft Entra 群組的登入。如需傳送登入的指令碼,請參閱 如何在 SQL Server 2005 和 SQL Server 2008 的執行個體之間傳送登入和密碼。
建立登入會自動啟用新登入,並授與登入伺服器層級的 CONNECT SQL 權限。
重要
如需在 Azure SQL Database 中使用登入和使用者的資訊,請參閱管理 Azure SQL Database 中的登入 (機器翻譯)。
登入和權限
只有伺服器層級主體登入(由布建程式所建立)或資料庫中或sysadmin
資料庫角色master
的成員securityadmin
才能建立新的登入。 如需詳細資訊,請參閱伺服器層級角色和 ALTER SERVER ROLE。
根據預設,授與新建立Microsoft Entra 登入 master
的標準許可權為: CONNECT SQL 和 VIEW ANY DATABASE。
SQL 受管理執行個體 登入
必須具有伺服器的 ALTER ANY LOGIN 權限,或是
securityadmin
或sysadmin
固定伺服器角色之一的成員資格。 只有伺服器上具有 ALTER ANY LOGIN 許可權的 Microsoft Entra 帳戶,或其中一個角色的成員資格才能執行 create 命令。如果登入是 SQL 主體,只有屬於角色的
sysadmin
登入才能使用 create 命令來建立Microsoft Entra 帳戶的登入。必須是與 Azure SQL 受控執行個體 相同Microsoft Entra 租用戶的成員。
建立登入之後
建立登入之後,登入就可以連線至受控執行個體,但只會有授與 public 角色的權限。 請考慮執行下列其中一些活動。
若要從 Microsoft Entra 登入建立使用者,請參閱 CREATE USER。
若要將許可權授與資料庫中的使用者,請使用
ALTER SERVER ROLE ... ADD MEMBER
語句將使用者新增至其中一個內建資料庫角色或自定義角色,或使用 GRANT 語句直接將許可權授與使用者。 如需詳細資訊,請參閱非管理員角色 \(機器翻譯\)、其他伺服器層級的系統管理角色 \(機器翻譯\)、ALTER SERVER ROLE 和 GRANT 陳述式。若要授與全伺服器許可權,請在
master
資料庫中建立資料庫使用者,並使用ALTER SERVER ROLE ... ADD MEMBER
語句將使用者新增至其中一個系統管理伺服器角色。 如需詳細資訊,請參閱伺服器層級角色和 ALTER SERVER ROLE,以及伺服器角色。- 使用下列命令將角色新增
sysadmin
至 Microsoft Entra 登入:ALTER SERVER ROLE sysadmin ADD MEMBER [MS_Entra_login]
- 使用下列命令將角色新增
使用 GRANT 陳述式將伺服器層級權限授與新登入或包含登入的角色。 如需詳細資訊,請參閱 GRANT。
限制
不支援將對應至Microsoft Entra 群組的Microsoft Entra 登入設定為資料庫擁有者。
支援使用其他Microsoft Entra 主體來模擬Microsoft Entra 登入,例如 EXECUTE AS 子句。
只有屬於角色的伺服器
sysadmin
主體(登入)才能執行下列作業,以Microsoft Entra 主體為目標:- EXECUTE AS USER
- EXECUTE AS LOGIN
從另一個Microsoft Entra 目錄匯入的外部(來賓)用戶無法直接設定為使用 Azure 入口網站 SQL 受管理執行個體 Microsoft Entra 系統管理員。 相反地,將外部使用者 加入可指派角色的群組 ,並將群組設定為實例管理員。 您可以使用 PowerShell 或 Azure CLI,將個別來賓使用者設為執行個體系統管理員。
登入不會復寫至故障轉移群組中的次要實例。 登入會儲存在
master
資料庫中,這是系統資料庫,因此不會進行異地復寫。 若要解決此問題,必須在次要實例上使用相同的 SID 建立登入。
-- Code to create login on the secondary instance
CREATE LOGIN foo WITH PASSWORD = '<enterStrongPasswordHere>', SID = <login_sid>;
範例
A. 使用密碼建立登入
下列範例會針對特定的使用者建立登入,並指派密碼。
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO
B. 從 SID 建立登入
下列範例會先建立 SQL Server 驗證登入,並判斷登入的 SID。
CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';
SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO
我的查詢會傳回 0x241C11948AEEB749B0D22646DB1A19F2 作為 SID。 您的查詢將傳回不同的值。 下列陳述式會刪除登入,並重新建立登入。 使用來自前一個查詢的 SID。
DROP LOGIN TestLogin;
GO
CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;
SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO
C. 建立 Microsoft Entra 使用者的登入
下列範例會為名為 contoso 的租使用者中存在的 Microsoft Entra 帳戶joe@contoso.onmicrosoft.com建立登入。
CREATE LOGIN [joe@contoso.onmicrosoft.com] FROM EXTERNAL PROVIDER
GO
D. 建立同盟Microsoft Entra 帳戶的登入
下列範例會為租用戶中名為 contoso 的同盟Microsoft Entra 帳戶bob@contoso.com建立登入。 使用者 bob 也可以是來賓使用者。
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
GO
E. 建立Microsoft Entra 群組的登入
下列範例會為租使用者 contoso 中存在的 Microsoft Entra 群組 mygroup 建立登入。
CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
GO
F. 建立 Microsoft Entra 應用程式的登入
下列範例會為租使用者 contoso 中存在的 Microsoft Entra 應用程式 myapp 建立登入。
CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER
G. 檢查新增的登入
若要檢查新增的登入,請執行下列 T-SQL 命令:
SELECT *
FROM sys.server_principals;
GO
相關內容
* Azure Synapse
Analytics *
Azure Synapse Analytics
語法
-- Syntax for Azure Synapse Analytics
CREATE LOGIN login_name
{
FROM EXTERNAL PROVIDER
| WITH <option_list> [,..]
}
<option_list> ::=
PASSWORD = { 'password' }
[ , SID = sid ]
引數
注意
Microsoft Entra 伺服器主體(登入) 目前為預覽狀態。
當與FROM EXTERNAL PROVIDER子句搭配使用時,登入會指定 Microsoft Entra 主體,這是Microsoft Entra 使用者、群組或應用程式。 否則,登入表示所建立的 SQL 登入名稱。
Microsoft屬於 2048 Microsoft Entra 安全組成員的使用者和服務主體(Microsoft Entra 應用程式)不支援在 SQL 資料庫、SQL 受管理執行個體 或 Azure Synapse 中登入資料庫。
從外部提供者
指定登入適用於 Microsoft Entra 驗證。
login_name
指定建立的登入名稱。 Azure Synapse 中的 SQL Analytics 僅支援 SQL 登入。 若要建立Microsoft Entra 使用者的帳戶,請使用 CREATE USER 語句。
PASSWORD ='password'
指定要建立的 SQL 登入密碼。 請使用增強式密碼。 如需詳細資訊,請參閱強式密碼和密碼原則。 從 SQL Server 2012 (11.x) 開始,預存密碼資訊會使用加料式 (Salted) 密碼的 SHA-512 加以計算。
密碼會區分大小寫。 密碼長度應一律至少為8個字元,且不能超過128個字元。 密碼可以包含 a-z、A-Z、0-9 及大多數非英數字元。 密碼不能包含單引號或 login_name。
SID = sid
用來重新建立登入。 僅適用於 SQL Server 驗證登入,不適用於 Windows 驗證登入。 指定新 SQL Server 驗證登入的 SID。 如果未使用此選項,SQL Server 會自動指派 SID。 SID 結構取決於 SQL Server 版本。 針對 SQL Analytics,這是由 0x01060000000000640000000000000000
加上代表 GUID 的 16 位元組組成的 32 位元組 (binary(32) ) 常值。 例如: SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7
。
備註
- 密碼會區分大小寫。
- 如需傳送登入的指令碼,請參閱 如何在 SQL Server 2005 和 SQL Server 2008 的執行個體之間傳送登入和密碼。
- 建立登入會自動啟用新登入,並授與登入伺服器層級的 CONNECT SQL 權限。
- 伺服器的驗證模式必須符合登入類型,以允許存取。
- 如需設計權限系統的資訊,請參閱 資料庫引擎權限使用者入門。
登入
CREATE LOGIN 陳述式必須是批次中唯一的陳述式。
使用如 sqlcmd 之類的工具來連線至 Azure Synapse 時,您必須使用 <login>@<server> 標記法,將 SQL Analytics 伺服器名稱附加至連接字串中的登入名稱。 例如,如果您的登入為 login1
,且 SQL Analytics 伺服器的完整名稱為 servername.database.windows.net
,則連接字串的 username 參數應該是 login1@servername
。 由於 username 參數的總長度為 128 個字元,因此 login_name 的限制為 127 個字元減去伺服器名稱的長度。 在此範例中,login_name
的長度只能是 117 個字元,因為 servername
為 10 個字元。
若要建立登入,您必須連線到 master
資料庫。
SQL Server 規則可讓您以 loginname@<servername>> 格式<建立 SQL Server 驗證登入。 如果您的 SQL Database 伺服器是 myazureserver 且您的登入為 myemail@contoso.com,則您必須以 myemail@contoso.com@myazureserver 提供登入。
驗證連線所需的登入資料,以及伺服器層級防火牆規則,會暫時快取在每個資料庫中。 此快取會定期重新整理。 若要重新整理驗證快取,並確定資料庫擁有登入資料表的最新版本,請執行 DBCC FLUSHAUTHCACHE。
如需登入的詳細資訊,請參閱管理資料庫和登入 \(部分機器翻譯\)。
權限
只有伺服器層級主體登入(由布建程式建立)或資料庫中資料庫角色master
的成員loginmanager
才能建立新的登入。 如需詳細資訊,請參閱伺服器層級角色和 ALTER SERVER ROLE。
建立登入之後
建立登入之後,登入就可以連線至 Azure Synapse,但是只會取得授與 public 角色的權限。 請考慮執行下列其中一些活動。
若要連接至資料庫,請建立用於登入的資料庫使用者。 如需詳細資訊,請參閱 CREATE USER。
若要將許可權授與資料庫中的使用者,請使用
ALTER SERVER ROLE ... ADD MEMBER
語句將使用者新增至其中一個內建資料庫角色或自定義角色,或使用 GRANT 語句直接將許可權授與使用者。 如需詳細資訊,請參閱非管理員角色 \(機器翻譯\)、其他伺服器層級的系統管理角色 \(機器翻譯\)、ALTER SERVER ROLE 和 GRANT 陳述式。若要授與全伺服器許可權,請在
master
資料庫中建立資料庫使用者,並使用ALTER SERVER ROLE ... ADD MEMBER
語句將使用者新增至其中一個系統管理伺服器角色。 如需詳細資訊,請參閱伺服器層級角色和 ALTER SERVER ROLE,以及伺服器角色。使用 GRANT 陳述式將伺服器層級權限授與新登入或包含登入的角色。 如需詳細資訊,請參閱 GRANT。
範例
A. 使用密碼建立登入
下列範例會針對特定的使用者建立登入,並指派密碼。
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO
B. 從 SID 建立登入
下列範例會先建立 SQL Server 驗證登入,並判斷登入的 SID。
CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';
SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO
我的查詢會傳回 0x241C11948AEEB749B0D22646DB1A19F2 作為 SID。 您的查詢將傳回不同的值。 下列陳述式會刪除登入,並重新建立登入。 使用來自前一個查詢的 SID。
DROP LOGIN TestLogin;
GO
CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;
SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO
相關內容
* Analytics
Platform System (PDW) *
分析平台系統
語法
-- Syntax for Analytics Platform System
CREATE LOGIN loginName { WITH <option_list1> | FROM WINDOWS }
<option_list1> ::=
PASSWORD = { 'password' } [ MUST_CHANGE ]
[ , <option_list> [ ,... ] ]
<option_list> ::=
CHECK_EXPIRATION = { ON | OFF}
| CHECK_POLICY = { ON | OFF}
引數
login_name
指定建立的登入名稱。 有四種登入:SQL Server 登入、Windows 登入、憑證對應登入和非對稱金鑰對應登入。 當您建立從 Windows 網域帳戶對應的登入時,必須使用 [<domainName>\<login_name>] 格式的 Windows 2000 前使用者登入名稱。 您無法以 login_name@DomainName 格式使用 UPN。 如需範例,請參閱本文稍後的範例 D。 驗證登入的類型為 sysname,且必須符合標識符的規則,且不能包含 『\』。 Windows 登入可以包含 ' \ '。 以 Active Directory 使用者為基礎的登入,其名稱僅限 21 個字元以內。
PASSWORD ='password'
僅適用於 SQL Server 登入。 指定要建立的登入密碼。 請使用增強式密碼。 如需詳細資訊,請參閱強式密碼和密碼原則。 從 SQL Server 2012 (11.x) 開始,預存密碼資訊會使用加料式 (Salted) 密碼的 SHA-512 加以計算。
密碼會區分大小寫。 密碼長度應一律至少為8個字元,且不能超過128個字元。 密碼可以包含 a-z、A-Z、0-9 及大多數非英數字元。 密碼不能包含單引號或 login_name。
MUST_CHANGE
僅適用於 SQL Server 登入。 如果有包含這個選項,第一次使用新登入時,SQL Server 會提示使用者輸入新密碼。
CHECK_EXPIRATION = { ON |OFF }
僅適用於 SQL Server 登入。 指定是否應該對這個登入強制執行密碼逾期原則。 預設值是 OFF。
CHECK_POLICY = { ON |OFF }
僅適用於 SQL Server 登入。 指定應該在這項登入上強制使用執行 SQL Server 之電腦的 Windows 密碼原則。 預設值是 ON。
如果 Windows 原則要求增強式密碼,則密碼必須至少包含下列四個特性的其中三個:
- 大寫字元 (A-Z)。
- 小寫字元 (a-z)。
- 數字 (0-9)。
- 其中一個非虛構字元,例如空格、_、@、*、^、%、!、$、#或 &。
WINDOWS
指定登入對應到 Windows 登入。
備註
- 密碼會區分大小寫。
- 如果指定 MUST_CHANGE,則 CHECK_EXPIRATION 和 CHECK_POLICY 必須設為 ON。 否則,陳述式便會失敗。
- 不支援CHECK_POLICY = OFF 和 CHECK_EXPIRATION = ON 的組合。
- 當 CHECK_POLICY 設為 OFF 時,lockout_time 會重設,且 CHECK_EXPIRATION 會設為 OFF。
重要
CHECK_EXPIRATION和CHECK_POLICY只會在 Windows Server 2003 和更新版本上強制執行。 如需詳細資訊,請參閱< Password Policy>。
- 如需傳送登入的指令碼,請參閱 如何在 SQL Server 2005 和 SQL Server 2008 的執行個體之間傳送登入和密碼。
- 建立登入會自動啟用新登入,並授與登入伺服器層級的 CONNECT SQL 權限。
- 如需設計權限系統的資訊,請參閱 資料庫引擎權限使用者入門。
權限
只有具備伺服器的 ALTER ANY LOGIN 權限或 securityadmin 固定伺服器角色之成員資格的使用者才能建立登入。 如需詳細資訊,請參閱伺服器層級角色和 ALTER SERVER ROLE。
建立登入之後
建立登入之後,登入就可以連線至 Azure Synapse Analytics,但是只會取得授與 public 角色的權限。 請考慮執行下列其中一些活動。
- 若要連接至資料庫,請建立用於登入的資料庫使用者。 如需詳細資訊,請參閱 CREATE USER。
- 使用 CREATE SERVER ROLE 建立使用者定義的伺服器角色。 使用
ALTER SERVER ROLE ... ADD MEMBER
將新的登入新增至使用者定義的伺服器角色。 如需詳細資訊,請參閱 CREATE SERVER ROL 和 ALTER SERVER ROLE。 - 使用
sp_addsrvrolemember
將登入新增至固定伺服器角色。 如需詳細資訊,請參閱伺服器層級角色和 sp_addsrvrolemember。 - 使用 GRANT 陳述式將伺服器層級權限授與新登入或包含登入的角色。 如需詳細資訊,請參閱 GRANT。
範例
G. 使用密碼建立 SQL Server 驗證登入
下列範例會建立使用密碼 A2c3456
的登入 Mary7
。
CREATE LOGIN Mary7 WITH PASSWORD = 'A2c3456$#' ;
H. 使用選項
下列範例會建立使用密碼與部分選用引數的登入 Mary8
。
CREATE LOGIN Mary8 WITH PASSWORD = 'A2c3456$#' MUST_CHANGE,
CHECK_EXPIRATION = ON,
CHECK_POLICY = ON;
I. 從 Windows 網域帳戶建立登入
下列範例會從 Contoso
網域中名稱為 Mary
的 Windows 網域帳戶建立登入。
CREATE LOGIN [Contoso\Mary] FROM WINDOWS;
GO