SQL Serverエンドポイントのセキュリティ設定を検査するにはどうすればよいですか?


10

現在、SQL Server開発スタッフ用のTEST環境を作成しています。

本番環境には3つのSQL Serverがあり、SQL01にミラーリングされたいくつかのデータベースが含まれていますSQL02SQL03「自動フェイルオーバーによる高い安全性」または同期構成での証人として機能します。

VMWare P2Vを使用して、3台すべてのマシンを個別のハードウェアに仮想化し、マシンのSIDを再構成し、これらの新しいマシンから本番サーバーのIPアドレスをブラックホール化しました。

最初はプロダクション監視マシンをブラックホール化するのを忘れていたので、TESTマシン上のデータベースはまだマシンを監視SQL03として使用していました。この問題に気付いて、私はTESTのデータベースを再構成して、新しく仮想化されたTESTの目撃者を指すようにしましたTEST03

新しいミラーリング監視を使用するようにデータベースを再構成するには、プライマリサーバーで次のコマンドを入力しましたTEST01

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

予期しない応答がありました:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

構成は運用マシンで機能し、テストマシンではまったく変更されていないため、このエラーメッセージに非常に困惑しました。

これを機能させるためLOGINに、テストの目撃者を作成する必要がありました。

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

そしてGRANTそのCONNECT問題のエンドポイント上の権利:

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

その後、テスト環境のミラーリングされたデータベースを新しいテストの目撃者に正しくポイントすることができました。

運用監視エンドポイントを検査して、それに関連付けられているセキュリティを確認するにはどうすればよいですか?

私は検査できるシステムカタログがいくつかあるはずだと思いますが、Books-on-LineにはEndpointsに固有のものはなく、BingはBinglessです。


追加情報:

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

戻り値:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

そして:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

戻り値:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

sys.server_permissionsミラーリングエンドポイントオブジェクトのエントリがないようです。65536 major_idminor_id一致しません。また、エンドポイントへの参照を含むシステムデータベースはありません。

私は途方に暮れています。

回答:


7

SQL Server 2012への移行に備えて、DEV環境でミラー化されたデータベースをサーバーからサーバーに移動することに1日の一部を費やした後、ENDPOINTのセキュリティはアカウントの種類にのみ基づいて決定されることを説明するこの MSDNドキュメントに出くわしましたSQL Serverが実行されています。SQL Serverがドメインアカウントを使用している場合、そのアカウントは自動的にエンドポイントにアクセスできます。SQL Serverが[ネットワークサービス]や[ローカルシステム]などのビルトインアカウントを使用している場合、エンドポイントはセキュリティ証明書で構成する必要があり、証明書の所有者のみがエンドポイントにアクセスできます。

ドキュメントの関連セクション:

データベースミラーリングエンドポイントの認証の種類の決定

次のように、サーバーインスタンスのSQL Serverサービスアカウントが、データベースミラーリングエンドポイントに使用できる認証の種類を決定することを理解することが重要です。

すべてのサーバーインスタンスがドメインサービスアカウントで実行されている場合は、データベースミラーリングエンドポイントにWindows認証を使用できます。すべてのサーバーインスタンスが同じドメインユーザーアカウントとして実行されている場合、正しいユーザーログインが両方のマスターデータベースに自動的に存在します。これにより、可用性データベースのセキュリティ構成が簡素化され、推奨されます。

可用性グループの可用性レプリカをホストしているサーバーインスタンスが別のアカウントとして実行されている場合は、他のサーバーインスタンスのマスターに各アカウントのログインを作成する必要があります。次に、そのログインに、そのサーバーインスタンスのデータベースミラーリングエンドポイントに接続するためのCONNECT権限を付与する必要があります。

サーバーインスタンスがWindows認証を使用している場合、Transact-SQL、PowerShell、または新しい可用性グループウィザードを使用して、データベースミラーリングエンドポイントを作成できます。

注意:

可用性レプリカをホストするサーバーインスタンスにデータベースミラーリングエンドポイントがない場合、新しい可用性グループウィザードは、Windows認証を使用するデータベースミラーリングエンドポイントを自動的に作成できます。

ローカルシステム、ローカルサービス、ネットワークサービスなどの組み込みアカウント、または非ドメインアカウントでサーバーインスタンスが実行されている場合は、エンドポイント認証に証明書を使用する必要があります。データベースミラーリングエンドポイントに証明書を使用している場合、システム管理者は、送信接続と受信接続の両方で証明書を使用するように各サーバーインスタンスを構成する必要があります。

証明書を使用してデータベースミラーリングのセキュリティを構成する自動化された方法はありません。CREATE ENDPOINT Transact-SQLステートメントまたはNew-SqlHadrEndpoint PowerShellコマンドレットを使用する必要があります。詳細については、「CREATE ENDPOINT(Transact-SQL)」を参照してください。

Remus Rusanu(彼の答えで)は、ミラーリングエンドポイントに設定されているセキュリティを決定する方法を正しく識別しました。のように:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

ただし、SQL Server 2005の場合、元のミラーリングエンドポイントはこのクエリの結果に表示されません。これは、デフォルトのセキュリティにより、SQL Serverが実行されているアカウントへのCONNECTアクセスが許可されているためです(上記で説明)。

ですから、エンドポイントへの接続アクセス権を持つユーザーを確認するための標準的な答えは、上記のクエリとSQL Serverが使用しているアカウントの合計であり、エンドポイントへのアクセス権を使用して構成した可能性のある証明書があります。 。


4

私はたまたま本番のデータベースにこれを設定しただけで、同じことが原因で、別のミラーリングセッションと構成を比較して、正しく一致することを確認する必要がありました。

sys.dm_db_mirroring_connectionsあなたが望むあなたを提供する必要があります。これには以下が含まれますprincipal_name

接続許可について検証されたログインの名前。Windows認証の場合、この値はリモートユーザー名です。証明書認証の場合、この値は証明書の所有者です。

一時停止しているセッションで作業している場合、これでも情報が返されるかどうかは不明ですが、アクティブな接続しかないと考えてください。


ありがとう、ショーン。これは確かに実際にエンドポイントに接続されているリモートユーザー名を示していますが、実際のテストではなく、本番環境での接続を許可しているセキュリティ設定の問題には実際には答えていません。とにかく助けてくれてありがとう!
Max Vernon、

3

Books Onlineのドキュメントを参照してください。 sys.database_mirroring_endpoints

サーバーオブジェクトのアクセス許可については、通常の場所を参照してくださいsys.server_permissions。Windowsのセキュリティが関係するすべての場合と同様に、Windowsグループのメンバーシップのために状況はより複雑になり、アクセス許可の階層も考慮する必要があります


私はそれを見ましたが、必要なのはエンドポイントへのCONNECTアクセス権を持つログインのリストです。sys.database_mirroring_endpointsはそれを表示していないようです-私が何かを見逃していない限り!
Max Vernon

1
サーバーオブジェクトのアクセス許可については、通常の場所を参照してくださいsys.server_permissions。Windowsのセキュリティが関係するすべての場合と同様に、Windowsグループのメンバーシップのために状況はより複雑になり、アクセス許可の階層も考慮する必要があります
Remus Rusanu 2012年

3
答え自体で少し詳しく説明できますか?
jcolebrand
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.