SQL Database 複寫安全性設定

  • 661
  • 0

為了更高的安全性,我們通常會新增 SQL 帳號,並且針對不同帳號給予不同的權限,避免使用管理者帳號來存取資料庫,否則當程式有漏洞的時候,可能整台 DB 的資料庫都會有安全性的問題。

針對上一篇容錯移轉設定之後,還有些安全性的議題,本文就針對安全性的設定上,說明如何調整資料庫的連線帳號。

前言

為了更高的安全性,我們通常會新增 SQL 帳號,並且針對不同帳號給予不同的權限,避免使用管理者帳號來存取資料庫,否則當程式有漏洞的時候,可能整台 DB 的資料庫都會有安全性的問題。

針對上一篇容錯移轉設定之後,還有些安全性的議題,本文就針對安全性的設定上,說明如何調整資料庫的連線帳號。

實做

在建立容錯移轉群組之後,資料庫內的登入帳號也會複寫過去,但是在次要伺服器上並沒有這組帳號,就算再次要伺服器上再建立一組一樣名稱的帳號也是會被認定是不同的帳號,因為帳號會有一組的獨一的 SID ,而因為複寫的資料庫也被設定成 Read-Only ,是無法再重建的,因此需要再次要伺服器的建立一組同樣帳號且 SID 相同的帳號,才有辦法正常登入,這樣程式在連線字串上也不會因為容錯移轉之後需要再調整。

取得 SID

在主要伺服器執行以下語法之後就會列出目前資料庫裡面有的帳號和 SID。

SELECT [name], [sid]FROM [sys].[sql_logins]WHERE [type_desc] = 'SQL_Login'

建立帳號

接下來複製 SID 並且在次要伺服器執行語法,就完成帳號的建立了,此時這一組帳號的 SID 就會和主要的相同了。

CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>', SID = <login_sid>;

結論

在實務上非常不建議只使用一組帳號來管理和使用資料庫,通常會針對不同應用程式或使用情境來設定帳號和權限,因此在複寫的情境底下會需要處理才可以在不變更連線字串下,可以在伺服器異常的時候切換伺服器。

參考資料

  1. 建立和管理 Azure SQL Database 安全性以供異地還原或容錯移轉使用