SQL Server 2022 : Windows 認証する2023/12/07 |
CentOS サーバー上で稼働する SQL Server に対して Windows 認証でログオンできるように設定します。
|
|||||||||||
[1] |
こちらを参考に SQL Server が稼働する CentOS サーバーを
Active Directory ドメインに加えておきます。
当例では以下のような環境を前提に進めます。
|
||||||||||
[2] |
事前に AD 側で、Powershell を管理者で起動して SQL Server サービス用のユーザーを作成しておきます。 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) を確認します。 |
# 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/cent total 4 -rw-r--r--. 1 cent cent 440 Dec 7 15:35 mssql.keytab
[root@dlp ~]#
mv /home/cent/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: KCM:214001103:87964 Default principal: Serverworld@SRV.WORLD Valid starting Expires Service principal 12/07/2023 15:21:43 12/08/2023 01:21:43 krbtgt/SRV.WORLD@SRV.WORLD renew until 12/14/2023 15:21:40[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 (CentOS Stream 9) <X64> (1 rows affected) |
ドメイン参加した Windows クライアント上の SSMS からも [Windows 認証] でログイン可能です。 |
Sponsored Link |