為 Linux 上的 SQL Server 輪替金鑰表
適用於:SQL Server - Linux
根據貴組織的安全性最佳做法,您可能需要定期輪替如 network.privilegedadaccount
中所 mssql.conf
提供之 Windows Active Directory 帳戶的密碼,或擁有 SQL Server 服務之服務主體名稱 (SPN) 的任何其他帳戶。 本文記載了變更帳戶密碼的支援方法。 密碼變更無須重新啟動 Linux 上的 SQL Server 服務即會生效。
adutil 工具可用來更新金鑰表。 adutil 命令必須從已加入網域的機器執行。 如需 adutil 和如何下載工具的詳細資訊,請參閱 adutil - Active Directory 公用程序簡介。
請務必先使用下一個 kvno 數值更新金鑰表中的新密碼,再更新 Active Directory 中的密碼。 使用下一個 kvno 數值,在密碼變更之後就無須重新啟動 SQL Server 服務。 如果您先更新 Active Directory 中的密碼,再變更金鑰表,則必須重新啟動 SQL Server 服務,以確保 Active Directory 驗證能夠正常運作。
輪替金鑰表的案例
我們來看一個範例。 Linux 上的 SQL Server 已啟用 Active Directory 驗證。 在檔案中 mssql.conf
,您會將 設定 network.privilegedadaccount
為 sqluser
。 帳戶 sqluser@CONTOSO.COM
已在 Active Directory 中建立,而且 Keytab 也會在預設位置 /var/opt/mssql/secrets/mssql.keytab
建立。 現在,您想要變更 sqluser@CONTOSO.COM
的密碼。 以下是您需要執行的步驟:
在已加入網域的機器上安裝 adutil。
使用
kinit
命令取得或更新 Kerberos TGT (票證授權票證)。 針對kinit
命令使用具特殊權限的帳戶。 此帳戶必須具有連線至網域的權限,且必須能夠在網域中建立帳戶和 SPN。 在此情況下,我們會使用有權在我們的網域中建立帳戶和 SPN 的帳戶privilegeduser@CONTOSO.COM
,稱為CONTOSO.COM
。kinit privilegeduser@CONTOSO.COM
kinit
執行 以取得/更新 TGT 之後,請查詢 目前的 kvno 編號network.privilegedadaccount
。 在此案例中,此名稱為sqluser@CONTOSO.COM
。kvno sqluser@CONTOSO.COM
您可以選擇使用 mssql-conf 輪替金鑰表,或使用 adutil 手動輪替金鑰表。
使用 mssql-conf 輪替金鑰表
您可以安裝 adutil 並將其與 mssql-conf 整合,這表示您可以使用 mssql-conf 來輪替金鑰表。
以根使用者身分登入,然後切換至
mssql
使用者。su mssql
使用
kinit
命令取得或更新 Kerberos TGT (票證授權票證)。 針對kinit
命令使用具特殊權限的帳戶。 此帳戶必須具有連線至網域的權限,且必須能夠在網域中建立帳戶和 SPN。 在此情況下,我們會使用有權在我們的網域中建立帳戶和 SPN 的帳戶privilegeduser@CONTOSO.COM
,稱為CONTOSO.COM
。kinit privilegeduser@CONTOSO.COM
執行 mssql-conf 命令,提供 SQL Server keytab 和
network.privilegedadaccount
詳細數據。 在此範例中,privilegedadaccount
是sqluser
。./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno'
當系統提示您輸入密碼時,請輸入您要使用的新密碼。
--use-next-kvno
選項會配置目前的 kvno + 1。選擇性:您也可以使用
--kvno
選項搭配mssql-conf setup-ad-keytab
命令來提供特定的 kvno。 您必須先為使用者取得目前的 kvno,然後據以更新 kvno,這會是目前的 kvno + 1。您可以使用命令列出金鑰表的金鑰:
klist -kte /var/opt/mssql/secrets/mssql.keytab
您會看到金鑰表中的使用者和 SPN 項目都已更新為下一個 kvno。
您現在可以變更
sqluser
使用者的密碼。 以下為範例。重要
如果系統提示您在此步驟期間重新啟動 SQL Server,您可以忽略它。 也請記得變更 Active Directory 中的密碼。
bash-4.4$ kinit privilegedaccount@CONTOSO.COM Password for privilegedaccount@CONTOSO.COM: bash-4.4$ ./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno sqluser@contoso.com's password: Confirm sqluser@contoso.com's password: SQL Server needs to be restarted in order to adopt the new AD configuration, please run 'systemctl restart mssql-server.service'. bash-4.4$ klist -kte /var/opt/mssql/secrets/mssql.keytab Keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
使用 adutil 手動輪替金鑰表
如果您想要使用 adutil 手動更新金鑰表,請參閱下列步驟。
使用 adutil 更新金鑰表,會將項目新增至目前的金鑰表。 例如,如果上一個命令中的 kvno 數值是 2
,在更新金鑰表時請使用 kvno 數值 3
。 以下是您需要執行的 adutil 命令。
- 將埠號碼 ()、主機名 (
-p
)、keytab 的路徑-H
-k
和 kvno 數位變更為符合您的環境。
adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H mssql.contoso.com --password '<newpassword>' -s MSSQLSvc --kvno 3
adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password '<newpassword>' --kvno 3
-k:
是 SQL Server 正在使用之目前 keytab 的路徑,並使用 檔案中的 mssql.conf
選項network.kerberoskeytabfile
進行設定。
-H:
是 SQL Server 主機的完整功能變數名稱。
-p:
是 SQL Server 服務設定為在第一個命令中接聽的埠。 在第二個指令中, -p
表示 network.privilegedadaccount
您要更新密碼的 。
kvno:
value 必須是目前的 kvno + 1。 目前的 kvno 值取自步驟 3。
執行上述命令後,您必須為金鑰表項目提供您選擇的加密類型。 請確實為您的環境選擇正確的類型。
檢查金鑰表項目
更新金鑰表之後,您現在應該會在金鑰表中看到相同帳戶 sqluser@CONTOSO.COM
和 SPN 的 kvno 3
(新的) 以及 kvno 2
(舊的)。 您可以執行下列 klist
命令,以檢查金鑰表中的項目:
klist -kte /var/opt/mssql/secrets/mssql.keytab
變更 Active Directory 中的帳戶密碼
最後一個步驟是更新或擁有 Windows Active Directory 中 SQL Server SPN 之帳戶的密碼 network.privilegedadaccount
。 在先前的案例中,我們必須更新 Active Directory 中的 sqluser@CONTOSO.COM
密碼。 請將密碼變更為您在上一節的步驟 3 中提供的 <newpassword>
。 Active Directory 驗證應該會繼續運作,而不需要重新啟動 SQL Server 服務。