匯出 (0) 列印
全部展開

Azure SQL Database 安全性方針和限制

更新日期: 2014年2月

本主題描述與安全性相關的 Microsoft Microsoft Azure SQL Database 方針和限制。管理 Azure SQL 資料庫 的安全性時,請考慮下列幾點:

Microsoft Azure SQL Database 服務僅透過 TCP 連接埠 1433 提供。若要從您的電腦存取 Azure SQL 資料庫,務必確定您的防火牆允許 TCP 連接埠 1433 上的傳出 TCP 通訊。

初次連接到 Azure SQL 資料庫 伺服器之前,必須先使用 Azure 平台管理入口網站設定 Azure SQL 資料庫 防火牆。您將需要建立伺服器層級防火牆設定,以啟用從電腦或 Azure 到 Azure SQL 資料庫 伺服器的連線嘗試。此外,如果您想要控制 Azure SQL 資料庫 伺服器中某些資料庫的存取,請為各自的資料庫建立資料庫層級防火牆規則。如需詳細資訊,請參閱Azure SQL Database 防火牆

Microsoft Azure SQL Database 與應用程式之間的所有通訊隨時都需要加密 (SSL)。如果您的用戶端應用程式未在連線時驗證憑證,您的 Microsoft Azure SQL Database 連線可能會受到攔截式攻擊。

若要使用應用程式程式碼或工具驗證憑證,請明確要求加密的連接,並且不要信任伺服器憑證。即使您的應用程式程式碼或工具未要求加密的連接,仍然會接收加密的連接。不過,它們可能不會驗證伺服器憑證,因此可能受到「攔截式」攻擊。

若要使用 ADO.NET 應用程式程式碼驗證憑證,請設定資料庫連接字串中的 Encrypt=TrueTrustServerCertificate=False。如需詳細資訊,請參閱作法:使用 ADO.NET 連接到 Azure SQL Database

虛擬機器建立 Management Studio 也支援憑證驗證。在 [連接到伺服器] 對話方塊中,按一下 [連接屬性] 索引標籤上的 [加密連接]

note附註
虛擬機器建立 Management Studio 不支援早於 Microsoft Azure SQL Database 的 SQL Server 2008 R2 版本。

雖然從 Microsoft Azure SQL Database 開始 SQLCMD 即支援 SQL Server 2008,但是在早於 SQL Server 2008 R2 的版本中不支援憑證驗證。若要使用 SQLCMD (從 SQL Server 2008 R2 開始) 驗證憑證,請使用 -N 命令列選項,不要使用 -C 選項。若使用 -N 選項,SQLCMD 就可以要求加密的連接。不使用 -C 選項的話,SQLCMD 就不會以隱含方式信任伺服器憑證,並且會強制驗證憑證。

如需補充的技術資訊,請參閱 TechNet Wiki 網站的 Azure SQL Database 連接安全性

Microsoft Azure SQL Database 僅支援 虛擬機器建立 驗證。不支援 Windows 驗證 (整合式安全性)。使用者必須在每次連接到 Microsoft Azure SQL Database 時提供認證 (登入和密碼)。如需 虛擬機器建立 驗證的詳細資訊,請參閱《虛擬機器建立 線上叢書》中的<選擇驗證模式>。

基於效能的考量,在 Microsoft Azure SQL Database 中重設密碼時,即使因為連接共用而重設連接,該連接也不會重新驗證。這個行為與內部部署 虛擬機器建立 的行為不同。如果密碼已變更,要求將會失敗且工作階段將會中斷連接 (結束)。若要使用新的密碼進行驗證,請使用 KILL 命令終止工作階段並重新連接。如需有關 Kill 的詳細資訊,請參閱KILL (Azure SQL Database)

在 Microsoft Azure SQL Database 中管理登入和使用者時會有些限制。

  • 以下限制適用於伺服器層級主體登入:

    • master 資料庫中對應至伺服器層級主體登入的資料庫使用者無法修改或卸除。

    • 雖然伺服器層級主體登入不是 dbmanager 資料庫中 loginmanagermaster 這兩個資料庫角色的成員,但是仍然擁有授與這兩個角色的所有權限。

note附註
這個登入是在伺服器佈建期間建立,而且類似於 虛擬機器建立 執行個體中的 sa 登入。如需伺服器佈建的詳細資訊,請參閱Server Provisioning Model (SQL Data Services)

以下限制適用於所有登入:

  • 英文 (美國) 為預設語言。

  • 若要存取 master 資料庫,每個登入都必須對應至 master 資料庫中的使用者帳戶。

  • 如果沒有在連接字串中指定資料庫,則預設會將您連接到 master 資料庫。

  • 執行 CREATE/ALTER/DROP LOGINCREATE/ALTER/DROP DATABASE 陳述式時,您必須連接到 master 資料庫。

  • 在 ADO.NET 應用程式中執行 CREATE/ALTER/DROP LOGINCREATE/ALTER/DROP DATABASE 陳述式時,不允許使用參數化命令。如需詳細資訊,請參閱命令和參數 (ADO.NET)

  • 執行 CREATE/ALTER/DROP DATABASECREATE/ALTER/DROP LOGIN 陳述式時,各陳述式都必須是 Transact-SQL 批次中唯一的陳述式。否則就會發生錯誤。例如,下列 Transact-SQL 會檢查資料庫是否存在。如果資料庫存在,則會呼叫 DROP DATABASE 陳述式移除資料庫。由於 DROP DATABASE 陳述式不是批次中唯一的陳述式,因此執行這個 Transact-SQL 將導致錯誤。

IF EXISTS (SELECT [name]
           FROM   [sys].[databases]
           WHERE  [name] = N'database_name')
     DROP DATABASE [database_name];
go
  • 搭配 CREATE USER/FOR 選項執行 FROM LOGIN 陳述式時,該陳述式必須是 Transact-SQL 批次中唯一的陳述式。

  • 搭配 ALTER USER 選項執行 WITH LOGIN 陳述式時,該陳述式必須是 Transact-SQL 批次中唯一的陳述式。

  • 只有伺服器層級主體登入和 dbmanager 資料庫中 master 資料庫角色的成員才擁有執行 CREATE DATABASEDROP DATABASE 陳述式的權限。

  • 只有伺服器層級主體登入和 loginmanager 資料庫中 master 資料庫角色的成員才擁有執行 CREATE LOGINALTER LOGINDROP LOGIN 陳述式的權限。

  • 當資料庫角色的擁有者嘗試在資料庫角色中加入/移除另一個資料庫使用者時,可能會發生下列錯誤:User or role 'Name' does not exist in this database。因為擁有者看不見使用者,所以才會發生這個錯誤。若要解決這個問題,請將使用者的 VIEW DEFINITION 權限授與角色擁有者。

若要讓您的 Azure SQL 資料庫 應用程式比較不容易受到安全性威脅,請考慮下列幾點:

  • 一律使用最新的更新:當連接到您的 Azure SQL 資料庫 時,一律使用最新版的工具和程式庫以防止安全性弱點。如需支援之工具和程式庫的詳細資訊,請參閱Azure SQL Database 一般方針和限制

  • 封鎖 TCP 連接埠 1433 上的傳入連接:應用程式只需要 TCP 連接埠 1433 上的傳出連接就可以與 Microsoft Azure SQL Database 進行通訊。如果該電腦上的任何其他應用程式都不需要傳入通訊,請確定您的防火牆會繼續封鎖 TCP 通訊埠 1433 的傳入連接。

  • 防止隱碼攻擊弱點:為確保您的應用程式沒有 SQL 隱碼攻擊弱點,請盡可能使用參數化查詢。另外,務必徹底檢閱程式碼,並且在部署應用程式之前執行滲透測試 (Penetration Test)。

另請參閱

顯示:
© 2014 Microsoft