Debian 12 bookworm
Sponsored Link

SQL Server 2022 : Windows 認証する2023/12/15

 
Debian サーバー上で稼働する SQL Server に対して Windows 認証でログオンできるように設定します。
[1]
ドメインサーバー : Windows Server 2022
ドメイン名 : srv.world
ホスト名 : fd3s.srv.world
NetBIOS 名 : FD3S01
レルム : SRV.WORLD
[2]

事前に AD 側で、Powershell を管理者で起動して SQL Server サービス用のユーザーを作成しておきます。
当例では以下のように [mssql] ユーザーを作成して進めます。
ユーザー名やパスワードは任意の値で OK です。

PS > New-ADUser mssql `
-Surname "mssql" `
-GivenName "mssql" `
-DisplayName "MS SQL" `
-EmailAddress "mssql@srv.world" `
-AccountPassword (ConvertTo-SecureString -AsPlainText "P@ssw0rd01" -Force) `
-ChangePasswordAtLogon $false `
-PasswordNeverExpires $true `
-KerberosEncryptionType "AES128,AES256" `
-Enabled $true 
[3]
SQL Server サービス用のユーザーにサービスプリンシパル名をセットしておきます。
PS > setspn -A MSSQLSvc/(SQL Server 稼働ホストの FQDN):(SQL Server 稼働ポート) (SQL Server サービス用のユーザー)
PS > setspn -A MSSQLSvc/(SQL Server 稼働ホストの NetBIOS 名):(SQL Server 稼働ポート) (SQL Server サービス用のユーザー)
[4] SQL Server が稼働する CentOS サーバーで Key Version Number (kvno) を確認します。
root@dlp:~#
apt -y install krb5-user
# SQL Server サービス用の AD ユーザーで Kerberos チケット取得

root@dlp:~#
kinit mssql@SRV.WORLD

Password for mssql@SRV.WORLD:
# Key Version Number (kvno) 確認

root@dlp:~#
kvno MSSQLSvc/dlp.srv.world:1433

MSSQLSvc/dlp.srv.world:1433@SRV.WORLD: kvno = 2
[5]

AD 側で、下記コマンドを投入して keytab ファイルを作成し、SQL Server 稼働ホストに転送します。

PS > ktpass /princ MSSQLSvc/(SQL Server 稼働ホストの FQDN):(SQL Server 稼働ポート)@(ドメイン名) /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser (ドメイン名)\(SQL Server サービス用のユーザー) /out mssql.keytab -setpass -setupn /kvno (確認した kvno 番号) /pass (SQL Server サービス用のユーザーパスワード)

PS > ktpass /princ MSSQLSvc/(SQL Server 稼働ホストの FQDN):(SQL Server 稼働ポート)@(ドメイン名) /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser (ドメイン名)\(SQL Server サービス用のユーザー) /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno (確認した kvno 番号) /pass (SQL Server サービス用のユーザーパスワード)

PS > ktpass /princ MSSQLSvc/(SQL Server 稼働ホストの NetBIOS 名):(SQL Server 稼働ポート)@(ドメイン名) /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser (ドメイン名)\(SQL Server サービス用のユーザー) /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno (確認した kvno 番号) /pass (SQL Server サービス用のユーザーパスワード)

PS > ktpass /princ MSSQLSvc/(SQL Server 稼働ホストの NetBIOS 名):(SQL Server 稼働ポート)@(ドメイン名) /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser (ドメイン名)\(SQL Server サービス用のユーザー) /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno (確認した kvno 番号) /pass (SQL Server サービス用のユーザーパスワード)

PS > ktpass /princ (SQL Server サービス用のユーザー)@(ドメイン名) /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser (ドメイン名)\(SQL Server サービス用のユーザー) /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno (確認した kvno 番号) /pass (SQL Server サービス用のユーザーパスワード)

PS > ktpass /princ (SQL Server サービス用のユーザー)@(ドメイン名) /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser (ドメイン名)\(SQL Server サービス用のユーザー) /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno (確認した kvno 番号) /pass (SQL Server サービス用のユーザーパスワード)

例 ⇒
PS > ktpass /princ MSSQLSvc/dlp.srv.world:1433@SRV.WORLD /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser FD3S01\mssql /out mssql.keytab -setpass -setupn /kvno 2 /pass P@ssw0rd01 
PS > ktpass /princ MSSQLSvc/dlp.srv.world:1433@SRV.WORLD /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser FD3S01\mssql /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno 2 /pass P@ssw0rd01 
PS > ktpass /princ MSSQLSvc/DLP:1433@SRV.WORLD /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser FD3S01\mssql /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno 2 /pass P@ssw0rd01 
PS > ktpass /princ MSSQLSvc/DLP:1433@SRV.WORLD /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser FD3S01\mssql /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno 2 /pass P@ssw0rd01 
PS > ktpass /princ mssql@SRV.WORLD /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser FD3S01\mssql /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno 2 /pass P@ssw0rd01 
PS > ktpass /princ mssql@SRV.WORLD /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser FD3S01\mssql /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno 2 /pass P@ssw0rd01 
[6] SQL Server 稼働ホストで、転送した keytab ファイルを設定します。
# AD から 転送した keytab ファイル

root@dlp:~#
ll /home/debian

total 4
-rw-r--r-- 1 debian debian  440 Dec 14 23:42 mssql.keytab
root@dlp:~#
mv /home/debian/mssql.keytab /var/opt/mssql/secrets/

root@dlp:~#
chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab

root@dlp:~#
chmod 400 /var/opt/mssql/secrets/mssql.keytab
# keytab ファイル設定

root@dlp:~#
/opt/mssql/bin/mssql-conf set network.privilegedadaccount mssql

root@dlp:~#
/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab

SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
root@dlp:~#
systemctl restart mssql-server

[7] 任意の AD ユーザーと紐付く SQL Server ユーザーを作成します。
# 例として [serverworld] ユーザーを作成

root@dlp:~#
id FD3S01\\serverworld

uid=214001103(serverworld@srv.world) gid=214000513(domain users@srv.world) groups=214000513(domain users@srv.world)
root@dlp:~#
sqlcmd -S localhost -U SA

Password:
1> create login [FD3S01\Serverworld] from windows;
2> go
1> select name from sys.server_principals;
2> go
name
---------------------------------------------
sa
public
sysadmin
securityadmin
serveradmin
setupadmin
processadmin
diskadmin
dbcreator
bulkadmin
##MS_ServerStateReader##
##MS_ServerStateManager##
##MS_DefinitionReader##
##MS_DatabaseConnector##
##MS_DatabaseManager##
##MS_LoginManager##
##MS_SecurityDefinitionReader##
##MS_PerformanceDefinitionReader##
##MS_ServerSecurityStateReader##
##MS_ServerPerformanceStateReader##
##MS_SQLResourceSigningCertificate##
##MS_SQLReplicationSigningCertificate##
##MS_SQLAuthenticatorCertificate##
##MS_PolicySigningCertificate##
##MS_SmoExtendedSigningCertificate##
##MS_PolicyEventProcessingLogin##
##MS_PolicyTsqlExecutionLogin##
##MS_AgentSigningCertificate##
BUILTIN\Administrators
NT AUTHORITY\SYSTEM
NT AUTHORITY\NETWORK SERVICE
FD3S01\Serverworld

(32 rows affected)
[8] SQL Server ログインを作成した AD ユーザーで CentOS サーバーにログインし、SQL Server にもログイン可能か確認します。
# Kerberos チケット取得

serverworld@srv.world@dlp:~$
kinit

Password for Serverworld@SRV.WORLD:
serverworld@srv.world@dlp:~$
klist

Ticket cache: FILE:/tmp/krb5cc_214001103_FQtzrL
Default principal: Serverworld@SRV.WORLD

Valid starting       Expires              Service principal
12/14/2023 23:45:49  12/15/2023 09:45:49  krbtgt/SRV.WORLD@SRV.WORLD
        renew until 12/15/2023 23:45:45

serverworld@srv.world@dlp:~$
sqlcmd -S dlp.srv.world

1> select @@version;
2> go

----------------------------------------------------------------------------------------
Microsoft SQL Server 2022 (RTM-CU10) (KB5031778) - 16.0.4095.4 (X64)
        Oct 30 2023 16:12:44
        Copyright (C) 2022 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Debian GNU/Linux 12 (bookworm)) <X64>      

(1 rows affected)
  ドメイン参加した Windows クライアント上の SSMS からも [Windows 認証] でログイン可能です。
関連コンテンツ