sql server(日本語記事)
34 TopicsSQL Server IaaS Agent 拡張機能の概要 (What is the Windows SQL Server IaaS Agent extension?)
English follows Japanese. こんにちは、 SQL Server サポート チームです。 今回は、SQL IaaS Agent 拡張機能と Azure 上の SQL 仮想マシン リソースについて解説します。 SQL Server IaaS Agent 拡張機能とは SQL Server IaaS Agent 拡張機能は、Azure Portal 上から Azure VM 上の SQL Server を管理・運用できるようにする拡張機能です。 SQL Server がインストール済みの Azure VM が Azure 上の 「SQL Server IaaS Agent 拡張機能」 に登録されると、その Azure VMに紐づいた 「SQL 仮想マシン」リソース が Azure Portal 上に作成され、SQL Server のライセンス等を管理するための画面をご利用いただけるようになります。 //SQL Server IaaS Agent 拡張機能とは SQL Server IaaS Agent 拡張機能とは (Windows) - SQL Server on Azure VMs | Microsoft Learn 拡張機能に登録する利点 SQL Server IaaS Agent 拡張機能を使用することで、様々な管理機能を有効化することが可能です。代表的な機能を後述いたします。 前提として、 SQL Server IaaS Agent 拡張機能に登録すると、既定では基本的な機能(SQL 仮想マシン管理画面の [ライセンスの種類] )のみが有効化された状態となります。 下記の弊社公開情報に「SQL IaaS Agent 拡張機能が必要です。」と記載されたいずれかの機能を有効化すると、SQL IaaS Agent 拡張機能用のサービスが Azure VM 上にインストールされます。 // Windows SQL Server IaaS Agent 拡張機能を使用して管理を自動化する - 機能面の利点 https://learn.microsoft.com/ja-jp/azure/azure-sql/virtual-machines/windows/sql-server-iaas-agent-extension-automate-management?view=azuresql&tabs=azure-portal#feature-benefits 代表的な機能 SQL IaaS Agent 拡張機能が持つ機能は、前述の弊社公開情報にまとめられております。 そのうち、代表的な機能をご紹介します。詳細は、前述の公開情報や、それぞれの説明に添えた公開情報を必要に応じてご参照ください。 自動バックアップ Azure VM での SQL Server 上のすべての既存および新規データベースのための Microsoft Azure へのマネージド バックアップが自動的に構成されます。 // Azure 仮想マシンでの SQL Server 2014 の自動バックアップ - SQL Server on Azure VMs | Microsoft Learn https://learn.microsoft.com/ja-jp/azure/azure-sql/virtual-machines/windows/automated-backup-sql-2014?view=azuresql //Azure VM 上の SQL Server の自動バックアップ SQL Server 2016 以降の自動バックアップ - SQL Server on Azure VMs | Microsoft Learn tempdb の構成 Azure Portal 上から tempdb の ストレージ構成を行うことが可能になります。 //Azure portal を使用して SQL Server VM を管理する - ストレージ https://learn.microsoft.com/ja-jp/azure/azure-sql/virtual-machines/windows/manage-sql-vm-portal?view=azuresql#storage Microsoft Entra 認証 SQL Server への認証に Microsoft Entra ID を使用することが可能になります。 //Azure VM 上の SQL Server に対する Microsoft Entra 認証を有効にする Microsoft Entra 認証を有効にする - SQL Server on Azure VMs | Microsoft Learn FAQ SQL Server IaaS Agent 拡張機能 は有料ですか? SQL Server IaaS Agent 拡張機能を使用する際、追加の費用等は発生いたしません。 SQL Server IaaS Agent 拡張機能 に登録する方法を教えてください。 Azure PowerShell や Azure CLI での手動登録、 Azure Portal でサブスクリプション単位でのIaaS Agent 拡張機能の自動登録機能を有効化する方法がございます。また、弊社の定期メンテナンスにより登録が行われる場合もあります。 //SQL IaaS Agent 拡張機能への自動登録 SQL IaaS Agent 拡張機能への自動登録 - SQL Server on Azure VMs | Microsoft Learn //Windows SQL Server VM を SQL IaaS Agent 拡張機能に登録する(手動登録) SQL IaaS Agent 拡張機能に登録する (Windows) - SQL Server on Azure VMs | Microsoft Learn 複数の SQL Server インスタンスがインストールされている環境で SQL Server IaaS Agent 拡張機能 をインストールすることは可能ですか? 複数の SQL Server インスタンスがある場合は既定のインスタンス (MSSQLSERVER) のみが拡張機能にサポートされます。具体的にサポートされる環境は以下となります。 1 つの既定のインスタンスのみがある環境。 複数のインスタンスがある場合は、Azure portal の拡張機能によって既定のインスタンスのみがサポートおよび管理されます。 既定のインスタンスがなく名前付きインスタンスが複数ある環境はサポートされていません。 インストールされているインスタンスが 1 つのみの場合は、1 つの名前付きインスタンスがサポートされます。 VM を削除すると SQL 仮想マシン リソースも削除されますか? 対象の SQL Server がインストールされた VM が削除されると、SQL 仮想マシンリソースも削除されます。 // ご参考) Azure VM 上の SQL Server についてよく寄せられる質問 (FAQ) - Azure SQL | Microsoft Learn https://learn.microsoft.com/ja-jp/azure/azure-sql/virtual-machines/windows/frequently-asked-questions-faq?view=azuresql ※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Hello, this is the SQL Server Support Team. In this article, we will explain the SQL IaaS Agent Extension and the SQL Virtual Machines resource on Azure. What is the SQL Server IaaS Agent extension? The SQL Server IaaS Agent Extension is a feature that enables you to manage and operate SQL Server installed on Azure VMs directly from the Azure Portal. When an Azure VM with SQL Server installed is registered with the "SQL Server IaaS Agent Extension" on Azure, a corresponding "SQL Virtual Machine" resource is created in the Azure Portal. This allows you to access a management interface for SQL Server licensing and other settings. //What is the SQL Server IaaS Agent extension? What is the SQL Server IaaS Agent extension? (Windows) - SQL Server on Azure VMs | Microsoft Learn Benefits of Registering the extension By using the SQL Server IaaS Agent Extension, you can enable various management features. Some of the key features are introduced below. By default, when a VM is registered with the SQL Server IaaS Agent Extension, only the basic functionality (such as the "SQL Server License" setting in the SQL Virtual Machine management) is enabled. When you enable any of the features listed in the Microsoft documentation that states "Requires SQL IaaS Agent extension.", the extension service is installed on the Azure VM. //Automate management with the Windows SQL Server IaaS Agent extension - Feature benefits https://learn.microsoft.com/ja-jp/azure/azure-sql/virtual-machines/windows/sql-server-iaas-agent-extension-automate-management?view=azuresql&tabs=azure-portal#feature-benefits Key Features The features provided by the SQL IaaS Agent Extension are summarized in the documentation above. Here are some of the most notable ones. For more details, please refer to the linked documentation. 1. Automated backup Automated Backup automatically configures Managed Backup to Microsoft Azure for all existing and new databases. //Automated Backup for SQL Server 2014 virtual machines (Resource Manager) Automated Backup for SQL Server 2014 Azure virtual machines - SQL Server on Azure VMs | Microsoft Learn //Automated Backup for SQL Server on Azure VMs Automated Backup for SQL Server 2016 and later - SQL Server on Azure VMs | Microsoft Learn 2. Configure tempdb You can configure tempdb storage directly from the Azure Portal. //Manage SQL Server VM using Azure Portal - Storage | Microsoft Learn https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/manage-sql-vm-portal?view=azuresql#storage 3. Microsoft Entra authentication You can use Microsoft Entra ID for authentication to SQL Server. //Enable Microsoft Entra authentication for SQL Server on Azure VMs Enable Microsoft Entra authentication - SQL Server on Azure VMs | Microsoft Learn FAQ Q: Is the SQL Server IaaS Agent Extension a paid feature? A: No, there are no additional costs for using the SQL Server IaaS Agent Extension. Q: How can I register with the SQL Server IaaS Agent Extension? A: You can register manually using Azure PowerShell or Azure CLI or enable automatic registration at the subscription level via the Azure Portal. Registration may also occur during maintenance by Microsoft. //Automatic registration with SQL IaaS Agent extension Automatic registration with SQL IaaS Agent extension - SQL Server on Azure VMs | Microsoft Learn //Register Windows SQL Server VM with SQL IaaS Agent extension Register with SQL IaaS Agent Extension (Windows) - SQL Server on Azure VMs | Microsoft Learn Q: Can I install the SQL Server IaaS Agent Extension in an environment with multiple SQL Server instances? A: The SQL IaaS Agent extension supports the following environments: One default instance. If there are multiple instances, only the default instance is supported and managed by the extension in the Azure portal. Environments with multiple named instances without a default instance aren't supported. One named instance, if it's the only installed instance. Q: If I delete the VM, will the SQL Virtual Machine resource also be deleted? A: Yes, if the VM with SQL Server installed is deleted, the corresponding SQL Virtual Machine resource will also be removed. //Frequently asked questions for SQL Server on Azure VMs Frequently asked questions (FAQ) for SQL Server on Azure VMs - Azure SQL | Microsoft Learn Note: The content of this article (including attachments and linked pages) is current as of the time of writing and may be subject to change without notice.109Views2likes0Comments拡張セキュリティ更新プログラム (ESU) について
こんにちは、 SQL Server サポートです。 今回は、SQL Server サポート期間とサポート終了後の拡張セキュリティ更新プログラム (ESU)について紹介します。 (目次)========================== SQL Server サポート期間について 拡張セキュリティ更新プログラム (ESU)について 拡張セキュリティ更新プログラム (ESU)適用の準備 拡張セキュリティ更新プログラム (ESU)適用の流れ 拡張セキュリティ更新プログラム (ESU)のよくある質問 ========================== SQL Server サポート期間について SQL Server に関するサポートをご利用の際に注意する点として、SQL Server のバージョンごとのサポート期間があります。 1つの製品にはメインストリームサポートの期間と延長サポートの期間があります。 メインストリームサポートは製品リリースから約5年間提供されます。サポート内容は、製品の不具合修正、設計変更要求、セキュリティの脆弱性対応などが行われ、テクニカルサポートへの問い合わせもほぼすべてのサポート契約で可能です。 延長サポートはメインストリームサポートが終了してから約5年間提供されます。サポート内容は、セキュリティの脆弱性など重大な問題のみ対応が行われ、テクニカルサポートへのお問い合わせはプレミアサポート契約や有償のインシデントパックなどの契約が必要です。 ※本文章は5年間のサポート提供を約束するものではありませんので、各製品の具体的なサポート期間はサポートライフサイクルをご確認ください。 ※テクニカルサポートへの問い合わせ可否は各サポート契約をご確認ください。 延長サポート期間の終了後は、定期的なセキュリティ更新プログラムが提供されなくなり、テクニカルサポートへの製品の問い合わせができなくなることを意味しています。 延長サポート期間終了後のバージョンで運用すると、セキュリティやコンプライアンスのリスクが大幅に高まります。そのため、お客様には最新バージョンにアップグレードすることを強くお勧めしています。 一方、新しいバージョンにアップグレードするためにはアプリケーションの動作検証なども含めて様々な作業が必要となり、時間を要することが考えられます。 そのようなお客様のためにマイクロソフトは特定の製品について拡張セキュリティ更新プログラム (Extended Security Update, 以下 ESU ) をご提供しています。 拡張セキュリティ更新プログラム (ESU) については、下記で紹介します。 拡張セキュリティ更新プログラム (ESU)について 拡張セキュリティ更新プログラム (ESU) は、延長サポート期間終了後の対象製品に対して、セキュリティに関する更新プログラムのご提供及びサポートへの製品の問い合わせが可能となるプログラムになります。 ※ バージョンや製品によって提供有無および提供期間が異なりますのでご注意ください。 製品ライフサイクルに関する FAQ - 拡張セキュリティ更新プログラム | Microsoft Docs 拡張セキュリティ更新プログラム (ESU) を受けるためには2つの方法があります。 ・Azure への移行 仮想マシンの利用料金と SQL Server ライセンスの利用料金以外の Azure の追加課金はございません。 SQL Server のライセンス持ち込みの場合はライセンス利用料金はかかりません。 ・オンプレ環境での ESU の契約 オンプレミス環境を対象とした ESU の費用を支払う方法は、以下2種類があります。 - 時間単位の従量課金 インターネット等を経由して Azure Arc に常に接続している必要があり、時間単位で費用が請求されます。 - 年単位 EA, EAS, SCE, EES などに基づくソフトウェアアシュアランス付きのライセンスを利用している場合、1年目、2年目、3年目の単位で費用を支払うことができます。 ご参考) Azure Arc によって有効化された SQL Server 拡張セキュリティ更新プログラム:ESU サブスクリプションの請求について 拡張セキュリティ更新プログラム (ESU)適用の準備 拡張セキュリティ更新プログラムは Azure Portal を経由して配布されるため、Azure Portal への登録が必要になります。 ESU費用は、年単位で支払う方法と従量課金で支払う方法の2パターンがあります。 ESU費用を年単位で支払う場合、Azure 試用版をご利用いただくことが可能ですが、試用期間は12か月のため、経過後は従量課金制に移行するか異なるアカウントで試用版を利用しての再作成が必要になります(※)。 ※ESU 費用を従量課金で支払う場合 異なるアカウントを再作成すると異なる環境に対する ESU の登録であると判断され、すでに支払い済みの ESU の費用も過去にさかのぼって重複して請求されるため、再作成せずに、従量課金制に移行して継続でご使用ください。Azure Arc のみの使用であれば、 ESU の従量課金費用以外に請求はありません。 ■無料アカウントサインアップ手順 1. Web ブラウザーで、Azure の無料アカウントを今すぐ作成する | Microsoft Azure にアクセスします。 2. [開始 (無料)] を選択します。 3. Microsoft または GitHub のアカウントでサインインするか、無料の Microsoft アカウントを作成します。 4. [自分の情報] ページで、適切な国またはリージョンを選択します。 氏名、メール アドレス、電話番号を入力します。 お住まいの国によっては、VAT 番号など、追加のフィールドが表示される場合があります。 [次へ] を選択して続行します。 5. [電話による本人確認] 画面で、国番号を選択し、自分がすぐに使える電話の番号を入力します。 6. テキストまたは通話で確認コードを取得できます。 関連するボタンを選択し、[確認コード] ボックスにコードを入力して、[コードの確認] を選びます。 7. 確認コードが正しい場合は、有効なクレジット カードの詳細を入力するように求められます。 カード情報を入力し、[次へ] を選択します。 8. 最後の手順では、契約とプライバシーに関する声明を確認し、[サインアップ] を選択します。 登録後は Azure Portal(https://portal.azure.com/) より、作成したアカウントでサインイン可能です。 ご参考)Azure 試用版利用方法 Azure 無料アカウントを使用して無料サービスを作成する - Microsoft Cost Management | Microsoft Learn ■最新のサービスパック適用 拡張セキュリティ更新プログラムを適用するには、ご利用のバージョンの最新の Service Pack を適用しておく必要があります。 参考として、2024年7月18日現在の公開情報の内容を記載します。 拡張セキュリティ更新プログラム FAQ - SQL Server | Microsoft Learn ***** 抜粋 ***** 拡張セキュリティ更新プログラムのメリットを活用するためには、最新の SQL Server Service パックを実行している必要がありますか? はい。ESU を適用するために、最新の Service パックを使用して SQL Server を実行する必要があります。 Microsoft では、最新の Service パックに適用可能な更新プログラムのみを作成します。 ***** 抜粋 ***** 拡張セキュリティ更新プログラム (ESU)適用の流れ - Azure Azure 上の環境で、SQL 仮想マシンの自動修正が有効化している環境は自動的に適用されます。 ご参考)Azure 仮想マシンでの SQL Server の自動修正 (Resource Manager) SQL Server VM の自動修正 (Resource Manager) - SQL Server on Azure VMs | Microsoft Docs - オンプレミス 下記の公開情報に記載の手順を参考に、Azure Arc から更新プログラムを取得してください。 延長セキュリティ更新プログラムとは - SQL Server | Microsoft Learn 従量課金でのESUの購入はこちらを参照ください。 Extended Security Updates - SQL Server enabled by Azure Arc | Microsoft Learn 拡張セキュリティ更新プログラム (ESU)のよくある質問 ESU に関するよくある質問は、こちらのリンクをご確認ください。 拡張セキュリティ更新プログラム FAQ - SQL Server | Microsoft Learn 製品ライフサイクルに関する FAQ - 拡張セキュリティ更新プログラム | Microsoft Learn 以下は、特によくお問い合わせいただくご質問です。 Q. 拡張セキュリティ更新プログラム (ESU) がリリースされたかどうかはどこで確認すればよいですか。 A. ESU がリリースされた際は、Azure Arc の画面のほか、下記サイトで確認できます。 セキュリティ更新プログラム ガイド - Microsoft SQL Server の最新の更新プログラムとバージョン履歴 - SQL Server | Microsoft Learn 延長セキュリティ更新プログラムとは - SQL Server | Microsoft Learn Q. Azure Arc の登録に費用はかかりますか。 A. Azure ArcにSQL Serverを登録する費用はかかりません。 ESUをオンプレミス環境のSQL Serverに適用する際の追加費用としては、ESUをご購入いただく分のみとなりますのでご安心ください。 Q. Azure で稼働中のSQL Server 2012 へ 手動でESU の適用ができますか。 A. はい、可能です。 Azure VM にてSQL Server を利用されるお客様は、修正プログラムの自動適用が無効にされている場合、Windows Server の「更新プログラムの確認」にて、ESU の確認及びインストールすることが可能です。 Q. オンプレミス環境の SQL Server 2012 へ自動でESUを適用する方法はありますか。 A. Azure Arc に接続することでパッチの自動インストールが可能です。 SQL Server を Azure Arc に自動的に接続する - SQL Server enabled by Azure Arc | Microsoft Learn Q.SQL Server 2012 ESUの利用は、Azure サブスクリプションへの登録が必要と認識しています。どのサブスクリプションに登録すればよいですか。 A. ESU を利用するためのサブスクリプションに制限事項はありません。 すでに登録いただいている既存のサブスクリプションでも、新規作成したものでもどちらでも問題ありませんので、ご都合のいいサブスクリプションをご利用ください。 Q.Azure Arc での対象のインスタンス登録時に[請求書ID] セクションに入力するESU 請求書番号とは何でしょうか。 A.ESU請求番号(またはESU ID)とは、ESU ライセンスをパートナー様から購入した際に払い出される番号となります。購入時の請求書をご確認ください。 登録いただくことで、お客様にて、対応する ESU の購入情報との組み合わせの管理にご利用いただけるものとなります。 Q. SQL Server 2012 のESU を利用するためにAzure の手続きの前提条件として「Azure Connected SQL Server Onboarding ロールを割り当てます。」とありますが、どこに割り当てるのでしょうか。 A.SQL Server のインスタンスの登録を行うユーザーに対して[Azure Connected SQL Server Onboarding] (日本語の場合は[Azure Connected SQL Server オンボード])ロールを付与してください。 Q.ESUを購入したらサポートへの問い合わせができますか。 A.ESU をご購入済みかつサポートプランをお持ちのお客様は、サポートへのお問い合わせが可能となります。 Azure に移行した場合は、Azure サポート プランで技術サポートを受けられます。 Q.ESUの2年目のみ購入するなど、一部だけ購入することはできますか。 A. いいえ、できません。 ESUの 1 年目を購入していない場合は、1 年目と 2 年目の拡張セキュリティ更新プログラムを購入する必要があります。同様に、 3 年目に初めて購入する場合は、3 年間の拡張セキュリティ更新プログラムをすべて購入する必要があります。 ESU費用を従量課金で支払う場合、 "ESU の提供開始時刻" から "従量課金での支払い登録を行った時刻" までの累積の時間単位の料金が最初の1時間以内に請求されます。つまり、ESU 提供開始から半年後に従量課金の支払い登録を行った場合、半年分の ESU 費用が最初の一時間以内に請求されます。 Q.ESUの2年目(3年目)を購入したのですが、Azure Arc上で再度インスタンスを登録する必要がありますか。 A. 1年目および2年目の購入時に Azure Arc にすでに登録済みの場合は、既存の登録済みのインスタンスに対し、新しく購入した請求書IDを紐づけることで Azure Arc上の ESU 有効期限が更新されます。 ESUの3年目をご利用になる場合は、そこまでのESUも購入する必要があるため、3年目を登録時には1,2,3 年目すべてのESU請求書番号がインスタンスに紐づけられた状態で登録します。 //画面例 請求書ID登録後、有効期限が更新されます。 //3年目のESUご利用の場合、1-3年目すべてのESU請求書番号を登録します。18KViews2likes1CommentSQL Server の更新プログラム GDR, CU, Service Pack の違いと適用可否
こんにちは、 SQL Server サポートです。 今回は、SQL Server の GDR, CU, Service Pack の違いと適用可否について紹介します。 GDR、CU、Service Pack の違い SQL Server の更新プログラムには主に GDR, CU, Service Pack の3種類があります。 GDR (General Distribution Release) 主にセキュリティ関連の修正を提供します。 そのバージョンのSQL Server の以前のGDR のすべての修正を含みます。 例えば、CU も GDR も適用していない SQL Server 2019 で、SQL Server 2019 向けの GDR5 を適用すると、GDR1~GDR4の修正も適用されます。 そのため、GDR1 → GDR2 → GDR3 →・・・のように段階的に適用する必要はありません。 CU (Cumulative Update) 機能改善やバグ修正を含む更新を提供します。 そのバージョンのSQL Server の以前のCU や以前のGDR のすべての修正を含みます。 例えば、CU も GDR も適用していない SQL Server 2019 で、SQL Server 2019 向けの CU5 を適用すると、CU1~CU4の修正も適用されます。 そのため、CU1 → CU2 → CU3 →・・・のように段階的に適用する必要はありません。 Service Pack 大規模な更新を提供し、複数の修正や新機能をまとめて提供します。 そのバージョンのSQL Server の以前のService Pack や以前のCU、以前のGDR のすべての修正を含みます。 そのため、例えば どの Service Pack も適用していない SQL Server 2016 で、Service Pack 3 を適用したい場合、 Service Pack1 → Service Pack2 → Service Pack3 のように段階的に適用する必要はありません。 ただし、どの Service Pack も適用していない SQL Server 2016 で Service Pack 3用の CU や GDR を適用したい場合は、Service Pack3 → 目的の CU や GDR のように適用する必要があります。 なお、Service Pack は SQL Server 2016 以前で提供されていました。 シンプルで予測可能なメインストリームサービス ライフサイクルを採用したため、SQL Server 2017 以降ではService Pack は存在せず、CU と GDR のみとなります。 GDR、 CU、 Service Pack の適用可否 ・GDR を適用済みの SQL Server には、より新しい GDR か Service Pack か CU が適用できます。 ・CU を適用済みの SQL Server には、より新しい CU か Service Pack が適用できます。 ・Service Pack が適用済みのSQL Server で、かつ CU も GDR も適用していない場合は、その Service Pack 用の CU または その Service Pack 用の GDR を適用できます。 各バージョンの SQL Server の最新の更新プログラムは下記から確認できます。 // SQL Server の最新の更新プログラムとバージョン履歴 - SQL Server | Microsoft Learn https://learn.microsoft.com/ja-jp/troubleshoot/sql/releases/download-and-install-latest-updates ※参考情報 // Announcing the Modern Servicing Model for SQL Server | Microsoft Community Hub https://techcommunity.microsoft.com/blog/sqlserver/announcing-the-modern-servicing-model-for-sql-server/385594 // SQL Server 累積的更新プログラム (CU) のインストールに関する一般的な問題のトラブルシューティング - SQL Server | Microsoft Learn https://learn.microsoft.com/ja-jp/troubleshoot/sql/database-engine/install/windows/sqlserver-patching-issues#cumulative-update-and-service-pack-installation-information // SQL Server のサービス モデル - SQL Server | Microsoft Learn https://learn.microsoft.com/ja-jp/troubleshoot/sql/releases/servicing-models-sql-server ※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。1.6KViews1like0CommentsWindows 上で動作するSQL Server の異なるインスタンス間で、ログインとパスワードを転送する方法
こんにちは。SQL Server サポート チームです。 今回は、Windows 上で動作するSQL Server の異なるインスタンス間で、ログインとパスワードを転送する方法についてご案内します。 SQL Server ではインスタンスに接続する際の認証に使用する(サーバー全体の権限を管理する)ログインという名称のプリンシパルと、インスタンスに接続した後に各データベースに接続する際の認証に使用する(データベースの権限を管理する)ユーザーという名称のプリンシパルが存在します。 本記事ではログインという表記の場合はログインプリンシパルを表し、ユーザーという表記の場合はユーザープリンシパルを意図したものとなります。 一般的にクライアントは、ログインプリンシパルを指定して SQL Server のインスタンスに接続し、ログインプリンシパルとマッピングされたユーザープリンシパルの権限を用いて、データベースにアクセスします。 下記図のようになります。 ■概要 Server A で稼働しているインスタンスにあるデータベースを、別の Server B のインスタンスに移行(バックアップリストア/デタッチアタッチなど)すると、以下のようなエラーが発生して、Server B のインスタンスに接続ができない場合があります。 ユーザー ' ログイン名 'の ログインに 失敗しました。 (Microsoft SQL Serverエラー: 18456) この問題は、Server A の SQL Server のインスタンスに存在していたログインが、Server B の SQL Server のインスタンスに存在しないために発生することがあります。 下記図が問題のイメージです。 この問題への対処は、Server B で適切なユーザーとマッピングさせたログインを新規に作成するか、本記事で説明する方法で Server A から Server B にログインをコピーします。 また、Server B のインスタンスに Server A と同じ名称のログインを作成して、Server B に移行したデータベースにアクセスしようとしたときに下記のようなエラーが発生して、データベースに接続ができない場合があります。 現在のセキュリティ コンテキストでは、サーバー プリンシパル "<ログイン名>" はデータベース "<データベース名>" にアクセスできません。 この問題は、Server A と Server B でログインの名称が同じでも内部的にログインを識別する SID が異なっていることが原因で発生します。 下記図が問題のイメージです。 この問題への対処は、 ALTER User を使用して Server B 上でログインとユーザーを再度マッピングするか、本記事で説明する方法で Server A から Server B にログインをコピーします。 本記事では、Server A のインスタンスに存在するログインをパスワードを保ったまま別の Server B のインスタンスにコピーする対応策について紹介します。 ■前提条件 ・本作業はすべて sysadmin ロールの権限を持ったログインにて実施します。 ■手順 1. SQL Server Management Studio(以下、SSMS)やその他のクライアントツールを使って Server A のインスタンスに接続します。 以下スクリプトを実行して、ログインとそのパスワードを転送するのに必要なスクリプトを生成するためのストアドプロシージャを作成します。 USE [master] GO IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE [dbo].[sp_hexadecimal] ( @binvalue varbinary(256), @hexvalue varchar (514) OUTPUT ) AS BEGIN DECLARE @charvalue varchar (514) DECLARE @i int DECLARE @length int DECLARE @hexstring char(16) SELECT @charvalue = '0x' SELECT @i = 1 SELECT @length = DATALENGTH (@binvalue) SELECT @hexstring = '0123456789ABCDEF' WHILE (@i <= @length) BEGIN DECLARE @tempint int DECLARE @firstint int DECLARE @secondint int SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SELECT @firstint = FLOOR(@tempint/16) SELECT @secondint = @tempint - (@firstint*16) SELECT @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SELECT @i = @i + 1 END SELECT @hexvalue = @charvalue END go IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL DROP PROCEDURE sp_help_revlogin GO CREATE PROCEDURE [dbo].[sp_help_revlogin] ( @login_name sysname = NULL ) AS BEGIN DECLARE @name SYSNAME DECLARE @type VARCHAR (1) DECLARE @hasaccess INT DECLARE @denylogin INT DECLARE @is_disabled INT DECLARE @PWD_varbinary VARBINARY (256) DECLARE @PWD_string VARCHAR (514) DECLARE @SID_varbinary VARBINARY (85) DECLARE @SID_string VARCHAR (514) DECLARE @tmpstr NVARCHAR (1024) DECLARE @is_policy_checked VARCHAR (3) DECLARE @is_expiration_checked VARCHAR (3) Declare @Prefix VARCHAR(255) DECLARE @defaultdb SYSNAME DECLARE @defaultlanguage SYSNAME DECLARE @tmpstrRole NVARCHAR (1024) IF (@login_name IS NULL) BEGIN DECLARE login_curs CURSOR FOR SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin, p.default_language_name FROM sys.server_principals p LEFT JOIN sys.syslogins l ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa' AND p.name not like '##%' ORDER BY p.name END ELSE DECLARE login_curs CURSOR FOR SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin, p.default_language_name FROM sys.server_principals p LEFT JOIN sys.syslogins l ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name ORDER BY p.name OPEN login_curs FETCH NEXT FROM login_curs INTO @SID_varbinary,@name , @type, @is_disabled, @defaultdb, @hasaccess, @denylogin, @defaultlanguage IF (@@fetch_status = -1) BEGIN PRINT 'No login(s) found.' CLOSE login_curs DEALLOCATE login_curs RETURN -1 END SET @tmpstr = '/* sp_help_revlogin script ' PRINT @tmpstr SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */' PRINT @tmpstr PRINT '' WHILE (@@fetch_status <> -1) BEGIN IF (@@fetch_status <> -2) BEGIN PRINT '' SET @tmpstr = '-- Login: ' + @name PRINT @tmpstr SET @tmpstr='IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'''+@name+''') BEGIN' Print @tmpstr IF (@type IN ( 'G', 'U')) BEGIN -- NT authenticated account/group SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']' + ', DEFAULT_LANGUAGE = [' + @defaultlanguage + ']' END ELSE BEGIN -- SQL Server authentication -- obtain password and sid SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) ) EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT -- obtain password policy state SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']' + ', DEFAULT_LANGUAGE = [' + @defaultlanguage + ']' IF ( @is_policy_checked IS NOT NULL ) BEGIN SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked END IF ( @is_expiration_checked IS NOT NULL ) BEGIN SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked END END IF (@denylogin = 1) BEGIN -- login is denied access SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name ) END ELSE IF (@hasaccess = 0) BEGIN -- login exists but does not have access SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name ) END IF (@is_disabled = 1) BEGIN -- login is disabled SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE' END SET @Prefix = ' EXEC master.dbo.sp_addsrvrolemember @loginame=''' SET @tmpstrRole='' SELECT @tmpstrRole = @tmpstrRole + CASE WHEN sysadmin = 1 THEN @Prefix + [LoginName] + ''', @rolename=''sysadmin''' ELSE '' END + CASE WHEN securityadmin = 1 THEN @Prefix + [LoginName] + ''', @rolename=''securityadmin''' ELSE '' END + CASE WHEN serveradmin = 1 THEN @Prefix + [LoginName] + ''', @rolename=''serveradmin''' ELSE '' END + CASE WHEN setupadmin = 1 THEN @Prefix + [LoginName] + ''', @rolename=''setupadmin''' ELSE '' END + CASE WHEN processadmin = 1 THEN @Prefix + [LoginName] + ''', @rolename=''processadmin''' ELSE '' END + CASE WHEN diskadmin = 1 THEN @Prefix + [LoginName] + ''', @rolename=''diskadmin''' ELSE '' END + CASE WHEN dbcreator = 1 THEN @Prefix + [LoginName] + ''', @rolename=''dbcreator''' ELSE '' END + CASE WHEN bulkadmin = 1 THEN @Prefix + [LoginName] + ''', @rolename=''bulkadmin''' ELSE '' END FROM ( SELECT CONVERT(NVARCHAR(100),SUSER_SNAME(sid)) AS [LoginName], sysadmin, securityadmin, serveradmin, setupadmin, processadmin, diskadmin, dbcreator, bulkadmin FROM sys.syslogins WHERE ( sysadmin<>0 OR securityadmin<>0 OR serveradmin<>0 OR setupadmin <>0 OR processadmin <>0 OR diskadmin<>0 OR dbcreator<>0 OR bulkadmin<>0 ) AND name=@name ) L PRINT @tmpstr PRINT @tmpstrRole PRINT 'END' END FETCH NEXT FROM login_curs INTO @SID_varbinary,@name , @type, @is_disabled, @defaultdb, @hasaccess, @denylogin, @defaultlanguage END CLOSE login_curs DEALLOCATE login_curs RETURN 0 END 2. 下記のステートメントを実行して、マスターデータベースに2つのストアドプロシージャ sp_hexadecimal と sp_help_revlogin が作成されたことを確認します。 name 列がそれぞれのストアドプロシージャになっている行が出力されていれば、作成されていると判断できます。 USE [master] GO SELECT * FROM sys.procedures WHERE name IN ('sp_hexadecimal','sp_help_revlogin') GO 3. SSMS のクエリ エディタを一度選択した状態で、SSMS のメニューバーから [クエリ] -> [結果の出力] -> [結果をテキストで表示] オプションを選択します。 4. [結果をテキストで表示] 設定を行ったクエリ エディタ―で下記のステートメントを実行します。 EXEC sp_help_revlogin 5. sp_help_revlogin ストアドプロシージャを実行することで、ログインを作成するためのスクリプトが出力されます。 IF NOT ~ END までが一つの塊となるため、Server B にコピーしたいログインに関するスクリプトを抜粋します。 なお、このスクリプトで作成した SQL Server 認証のログインは、元の SID と元のパスワードを保持したものが作成されます。 ・ SQL Server 認証のログイン( sqlUser01)の例 -- Login: sqlUser01 IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'sqlUser01') BEGIN CREATE LOGIN [sqlUser01] WITH PASSWORD = <暗号化されたパスワード> HASHED, SID = <ハッシュ>, DEFAULT_DATABASE = [master], CHECK_POLICY = ON, CHECK_EXPIRATION = ON END ・Windows 認証のログイン( <ドメイン名>\winUser01)の例 -- Login: <ドメイン名>\winUser01 IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'<ドメイン名>\winUser01') BEGIN CREATE LOGIN [<ドメイン名>\winUser01] FROM WINDOWS WITH DEFAULT_DATABASE = [master] END 6. 移行先のサーバー(Server B)での手順 SSMSなどのクライアントツールを使って Server B に接続し、手順5 で抜粋したスクリプト(sp_helprevloginの出力結果)をクエリとして実行します。 ■注意事項 手順6 で移行先のサーバー(Server B)での手順を実行する前に、以下の情報を確認してください。 Server A とServer B が異なるドメインにある場合で、 Windows 認証のログインをコピーする場合は、出力スクリプトを変更する必要があります。 手順5 で抜粋した CREATE LOGIN ステートメントには元のドメイン名が記載されているため、新しいドメイン名を使って置き換える必要があります。 新しいドメインでアクセスを許可された統合ログインは、元のドメインのログインと同じSIDを持たないため、ユーザーはこれらのログインから孤立した状態となります。 これらの孤立したユーザーを解決する方法の詳細については、「SQL Serverを実行しているサーバー間でデータベースを移動するときの権限の問題を解決する方法」を参照してください。 Server A とServer B が同じドメイン内にある場合は、同じ SID が使用されますので、ユーザーが孤立することは通常ありません。 この記事の手順では、特定のログインに対するデフォルトのデータベース情報の転送はされません。 これは、デフォルト データベースが Server B に存在するとは限らないためです。 送信元サーバーと送信先サーバーの照合順序の違いによる注意点: 大文字小文字を区別しない Server A と大文字小文字を区別する Server B: Server A の照合順序が大文字小文字を区別せず、Server B の照合順序が大文字小文字を区別する場合があります。 この場合、Server B のインスタンスにログイン名とパスワードを転送した後、ユーザーはパスワードをすべて大文字で入力する必要があります。 大文字小文字を区別する Server A と大文字小文字を区別しない Server B: Server A の照合順序が大文字小文字を区別し、Server B の照合順序が大文字小文字を区別しない場合があります。 この場合、以下のいずれかの条件が成立しない限り、ユーザーは Server B のインスタンスに転送したログイン名とパスワードを使ってログインすることができません。 ・元のパスワードのすべての文字が大文字である。 ・元のパスワードに文字が含まれていない。 両方のサーバーで大文字と小文字が区別されている、または大文字と小文字が区別されていない: Server A とServer B の両方のソート順が大文字と小文字を区別している場合や、Server A と Server B の両方のソート順が大文字と小文字を区別していない場合があります。 これらの場合、ユーザーには問題が発生しません。 Server B 上のインスタンスで出力スクリプトを実行した際に以下のようなエラーメッセージが表示された場合: Msg 15433、レベル 16、状態 1、Line 1 の指定されたパラメーター sid が使用されています。 →Server B 上のインスタンスに出力スクリプト内の名前と同じ名前を持つログインがすでに存在する。 Msg 15025、レベル 16、状態 1、行 1 サーバー プリンシパル 'MyLogin' は既に存在します。 →Server B 上のインスタンスに出力スクリプトの SID と同じ SID を持つログインがすでに存在する。 上記エラーを回避するために、次の操作を行う必要があります。 1. 出力スクリプト内のログイン情報を確認します。 2. Server B 上のインスタンスの sys.server_principals ビューの内容を調べます。 3. 必要に応じて、これらのエラー メッセージに対処します。 本記事は、インスタンス間でログインとパスワードを転送する - SQL Server | Microsoft Docs の情報を一部補足した内容となっております。13KViews1like0Comments