web-dev-qa-db-ja.com

データベースアプリケーションの更新を実行するユーザーアクセスをブロックする方法

私が作業している場所には、.NET WebインターフェイスとFoxProインターフェイスという2つの異なるユーザーインターフェイスを持つバックエンドとして機能するSQL Serverデータベース(Microsoft SQL Server 2008 R2)があります。

毎月、WebクライアントとFoxProクライアントの両方に更新を適用する必要があります。これを行う前に、更新プロセス中に誰もデータベースにアクセスしていないことを確認することをお勧めします。

データベースの更新中にデータベースへのアクセスを防止する最も簡単な方法は何ですか?フォローアップの質問:更新中にアクセスを禁止するbest方法は何ですか?

7
Baodad

データベースへのアクセスを制限する方法はいくつかあります。

  1. LOGON Triggerの使用-ただし、一時的にのみ(アップグレード前に有効にしてから無効にします)。スクリプトを含む詳細については、私の回答 こちら を参照してください。
  2. shutdown IIS on the webservers)を使用して、アプリケーションを使用して接続が行われないようにすることができます。これは、「アプリケーションのダウンタイム」
  3. を使用してデータベースをシングルユーザーモードで保持します(データベースへの他の接続がある場合、接続が待機するか拒否される可能性があるため、これは危険です。)

    alter database databasename
    set single_user with rollback immediately
    

メンテナンス期間中に、安全で計画的なアップグレードとしてオプション2を使用することをお勧めします。

編集:

制限付きユーザー-データベースに対するdbo権限を持つユーザーのみが許可されます(例:db_owner、dbcreator、sysadmin)。つまり、DBOである限り、複数のユーザーがデータベースにログインできます。

シングルユーザー-許可される接続は1つだけです。つまり、先着順です。

シングルユーザーが先着順であるため、エラーが発生したり、何らかの理由で接続が終了したりすると、リスクが高くなります。

@AaronBertrandが指摘したように、ログオントリガーを処理する場合、既存のセッションでは機能しませんが、最初にすべてのセッションを強制終了してからトリガーを有効にすることで、すべての新しい着信接続を通過させる必要があります。引き金。

データベースへの接続を制限する他の方法は考えられません。

9
Kin Shah

データベースを制限付きユーザーモードにすると、固定サーバーロールsysadminまたはdbcreatorのメンバー、または固定データベースロールdb_ownerのメンバーのみがデータベースにアクセスできます。

ALTER DATABASE my_app_db SET RESTRICTED_USER

既存の接続を強制的に閉じたい場合:

ALTER DATABASE my_app_db SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE

そして、物事を通常の状態に戻す準備ができたら:

ALTER DATABASE my_app_db SET MULTI_USER

ソース: http://www.blackwasp.co.uk/SQLRestrictedUser.aspx

これらの場合、アプリケーションの更新プロセスで複数の接続を同時に開く必要があるため、シングルユーザーモードはお勧めしません。

9
db2

データベースにアクセスする一連のユーザーグループ、またはデータベース接続を行う1つまたは2つのアプリケーションアカウントがある場合は、ログインを無効にしてすべての接続を終了し、ログインを再度有効にするだけです。あなたが終わったとき。

3
Cougar9000

SQL Serverが、アクセスしているアプリと同じマシン上にあるかどうかわかりません。

そうでない場合は、すべての受信トラフィックに対してSQL Serverのファイアウォールポートを無効にするだけで問題ありません。別のオプションは、サーバーへのアクセスに使用されるSQL Server構成マネージャーでIPアドレスを無効にすることです(ローカルIP 127.0.0.1のみを残します)。

1
Stanley Norman