プレビューポータルからは SQL Database のサーバー名を設定できるようになったので、CNAME でアクセスしたいということは少ないかもしれませんが。
元ネタは こちら
A Custom DNS Name for my SQL Azure Database Server
SQL Database には「~.database.windows.net」でアクセスをしますが、以下のような CNAME を設定してアクセスすることも可能です。
今回は自前のドメインのサブドメインとして、SQL Database の DNS 名を登録しています。
この場合、ログイン名の後ろに「@サーバー名」を指定して、アクセスをする必要があります。
# TDS ゲートウェイがルーティングを行うために、どのサーバーに接続すればよいかを判断する必要があるためかと。
この状態で、「暗号化接続」(Encrypt=True)で接続をするとどうなるでしょう。
接続をしようとすると以下のようなエラーで接続が拒否されます。
サーバーとの接続を正常に確立しましたが、ログイン中にエラーが発生しました。 (provider: SSL Provider, error: 0 – 対象のプリンシパル名が間違っています。) (Microsoft SQL Server、エラー: -2146893022)
ヘルプを表示するには http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2146893022&LinkId=20476 をクリック
サーバー側で暗号化接続で使用する証明書が「database.windows.net」で設定されているので、CNAME で独自のドメイン名を使用してしまうと、プリンシパル名が異なるということでエラーとなってしまいます。
独自のドメイン名で暗号化接続をする場合、「trustServerCertificate」を使用して、証明書の検証をスキップする必要があります。
SSL 暗号化を使用した接続
SSL のサポートについて
接続プロパティの設定
SSMS の場合は以下のように「追加の接続パラメーター」で有効化することで、プロパティを有効にできます。
これで暗号化接続が有効な状態で接続が可能となります。
sqlcmd で接続する場合には、「-N」(暗号化接続)と「-C」(サーバー証明書を信頼) を使用することで、CNAME を使って暗号化接続をすることができます。
これらは自己署名証明書を使用してオンプレミスの SQL Server の接続を暗号化した場合に、接続元のルート証明書として、暗号化接続で使用する証明書の証明機関が登録されていない場合も使用する方法になります。