CREATE LOGIN (Transact-SQL)

建立 SQL Server、Azure SQL 資料庫、Azure SQL 受控執行個體、Azure Synapse Analytics 或 Analytics Platform System 資料庫的登入。 針對特定版本的語法、自變數、備註、許可權和範例,選擇下列其中一個索引標籤。

CREATE LOGIN 會參與交易。 如果在交易內執行 CREATE LOGIN 並復原交易,將會復原建立登入作業。 如果在交易內執行,則在認可交易之前,無法使用建立的登入。

注意

Microsoft Entra 標識符 先前稱為 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 登入的認證名稱。 認證必須已存在於伺服器中。 目前這個選項只會將認證連結到登入。 認證無法對應至系統 管理員 istrator (sa) 登入。

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

FROM EXTERNAL PROVIDER

指定登入對應至 Microsoft Entra 主體。 此選項適用於已啟用 Arc 的 SQL Server 2022 和更新版本。 如需詳細資訊,請參閱 SQL Server 的 Microsoft Entra 驗證

CERTIFICATE certname

指定與這項登入相關聯的憑證名稱。 這個憑證必須已存在於 master 資料庫中。

ASYMMETRIC KEY asym_key_name

指定與這項登入相關聯的非對稱金鑰名稱。 這個金鑰必須已存在於 master 資料庫中。

備註

  • 密碼會區分大小寫。
  • 只有在建立 SQL Server 登入時,才支援密碼預先隱藏。
  • 如果指定 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
  • 如果使用 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 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 帳戶的登入

下列範例會建立同盟 Microsoft Entra 帳戶的登入,該帳戶 bob@contoso.com 存在於名為 contoso 的租使用者中。 使用者 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

語法

-- 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 登入名稱。

不支援屬於 2048 個以上 Microsoft Entra 安全組成員的 Microsoft Entra 使用者和服務主體,無法在 SQL 資料庫、SQL 受管理執行個體 或 Azure Synapse 中登入資料庫。

FROM EXTERNAL PROVIDER

指定登入適用於 Microsoft Entra 驗證。

WITH OBJECT_ID = 'objectid'

指定 Microsoft Entra 物件識別碼。 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 Database 中,必須連線至 master 資料庫以適當的權限建立登入。 如需詳細資訊,請參閱建立其他登入和具有系統管理權限的使用者 (機器翻譯)。

SQL Server 規則可讓您建立 <loginname>@<servername> 格式的 SQL Server 驗證登入。 如果您的 SQL Database 伺服器是 myazureserver 且您的登入為 myemail@live.com,則您必須以 myemail@live.com@myazureserver 提供登入。

在 SQL Database 中,驗證連線需要登入資料,且伺服器層級防火牆規則會暫時快取在每個資料庫中。 此快取會定期重新整理。 若要重新整理驗證快取,並確定資料庫擁有登入資料表的最新版本,請執行 DBCC FLUSHAUTHCACHE

權限

只有 master 資料庫中的伺服器層級主體登入 (由佈建程序所建立) 或 loginmanager 資料庫角色成員,才能建立新登入。 如需詳細資訊,請參閱建立其他登入和具有系統管理權限的使用者 (機器翻譯)。

範例

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 帳戶建立登入

此範例會使用 Microsoft Entra 網域contoso中名為 的使用者認證bob@contoso.com,在 Azure SQL 邏輯伺服器中建立登入。

Use master
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
GO

D. 使用物件標識碼建立具有別名的登入

您可以指定 Microsoft Entra 服務主體或群組的物件標識碼,為 login_name 建立別名。

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID='4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 

如需取得服務主體對象標識碼的詳細資訊,請參閱 服務主體物件

* 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 登入名稱。

不支援屬於 2048 個以上 Microsoft Entra 安全組成員的 Microsoft Entra 使用者和服務主體登入 Azure SQL 資料庫、Azure SQL 受控執行個體 或 Azure Synapse 中的資料庫。

FROM EXTERNAL PROVIDER

指定登入適用於 Microsoft Entra 驗證。

WITH OBJECT_ID = 'objectid'

指定 Microsoft Entra 物件識別碼。 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 會建立對應至 Microsoft Entra 帳戶的伺服器層級主體

  • 指定時 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 對應至 Microsoft Entra 使用者的登入,或輸入數據行值設定 為 X ,且type_desc值設定為 EXTERNAL_GROUP ,以用於對應至 Microsoft Entra 群組的登入。

  • 如需傳送登入的指令碼,請參閱 如何在 SQL Server 2005 和 SQL Server 2008 的執行個體之間傳送登入和密碼

  • 建立登入會自動啟用新登入,並授與登入伺服器層級的 CONNECT SQL 權限。

重要

如需在 Azure SQL Database 中使用登入和使用者的資訊,請參閱管理 Azure SQL Database 中的登入 (機器翻譯)。

登入和權限

只有 master 資料庫中的伺服器層級主體登入 (由佈建處理序所建立) 或者是 securityadminsysadmin 資料庫角色的成員,才能建立新登入。 如需詳細資訊,請參閱伺服器層級角色ALTER SERVER ROLE

根據預設,在 master 中授與新建立 Microsoft Entra 登入的標準許可權為: 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 受管理執行個體 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 使用者的登入

下列範例會建立 Microsoft Entra 帳戶的登入,該帳戶 joe@contoso.onmicrosoft.com 存在於名為 contoso 的租使用者中。

CREATE LOGIN [joe@contoso.onmicrosoft.com] FROM EXTERNAL PROVIDER

GO

D. 建立同盟 Microsoft Entra 帳戶的登入

下列範例會建立同盟 Microsoft Entra 帳戶的登入,該帳戶 bob@contoso.com 存在於名為 contoso 的租使用者中。 使用者 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 使用者和服務主體(Microsoft Entra 應用程式)不支援在 SQL 資料庫、SQL 受管理執行個體 或 Azure Synapse 中登入超過 2048 個 Microsoft Entra 安全組的成員。

FROM EXTERNAL PROVIDER

指定登入適用於 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@live.com,則您必須以 myemail@live.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