共用方式為


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>。

權限

  • 只有具備伺服器的 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 ROLALTER 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 statement 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 LOGINCREATE 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='aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb';

如需取得服務主體對象標識碼的詳細資訊,請參閱 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 LOGINCREATE 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 SQLVIEW ANY DATABASE

SQL 受管理執行個體 登入

  • 必須具有伺服器的 ALTER ANY LOGIN 權限,或是 securityadminsysadmin 固定伺服器角色之一的成員資格。 只有伺服器上具有 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 ROLEGRANT 陳述式。

  • 若要授與全伺服器許可權,請在 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

備註

登入

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 ROLEGRANT 陳述式。

  • 若要授與全伺服器許可權,請在 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>。

權限

只有具備伺服器的 ALTER ANY LOGIN 權限或 securityadmin 固定伺服器角色之成員資格的使用者才能建立登入。 如需詳細資訊,請參閱伺服器層級角色ALTER SERVER ROLE

建立登入之後

建立登入之後,登入就可以連線至 Azure Synapse Analytics,但是只會取得授與 public 角色的權限。 請考慮執行下列其中一些活動。

  • 若要連接至資料庫,請建立用於登入的資料庫使用者。 如需詳細資訊,請參閱 CREATE USER
  • 使用 CREATE SERVER ROLE 建立使用者定義的伺服器角色。 使用 ALTER SERVER ROLE ... ADD MEMBER 將新的登入新增至使用者定義的伺服器角色。 如需詳細資訊,請參閱 CREATE SERVER ROLALTER 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