23

SQL Server を使用して運用 PC に展開するアプリがあります。データベースにスキーマのバージョンを保存および取得できるようにしたいと考えています。これを達成するためのベストプラクティスに興味があります。主な目標は次のとおりです。

  1. データベースのバージョン番号を保存して簡単に取得できます。
  2. クライアントによって隠されているか、見つけて操作するのがより困難です。
  3. 新しいバージョンを作成するときに編集/変更できます。
  4. DB をバックアップするか、DB をデタッチすると、フォレンジック用のバージョン # が保持されます。

システムストアドプロシージャを介してアクセス/設定できる、通常のテーブルではなく、メタデータに「バージョン」を保存する方法があればいいのにと思います。

アイデアやベストプラクティスはありますか?

編集:私が見つけた有望なオプションの1つは、SQL Server拡張プロパティを使用して、「Schema_Version」とバージョン番号を使用してDBに割り当てられたキー|値を配置することです。それは暗号化されておらず (ただし、値は暗号化されている可能性があります)、隠蔽されていませんが、少なくとも一部のユーザーや現場担当者が閲覧する実際の DB 構造からは削除されています (私の欲求不満に! :) )

4

4 に答える 4

22

Red Gate で SQL Source Control と SQL Compare のプロダクト マネージャを務めています。完全な展開スクリプトを構築するための適切な移行スクリプトを選択するために、ツールがデータベースのバージョンを知る必要があるため、これとまったく同じ問題を解決する必要がありました。

最も一般的に考案された独自のソリューションであるバージョン テーブルを検討しました。しかし、私たちの調査から、ユーザーは一連のデータベース オブジェクトを「汚染されていない」状態に保ちたいと考えていることがわかったので、データベース レベルの拡張プロパティを選択しました。これを次のようにスクリプトに追加します。

IF EXISTS (SELECT 1 FROM fn_listextendedproperty(N'SQLSourceControl Database Revision', NULL, NULL, NULL, NULL, NULL, NULL))
  EXEC sp_dropextendedproperty N'SQLSourceControl Database Revision', NULL, NULL, NULL, NULL, NULL, NULL
EXEC sp_addextendedproperty N'SQLSourceControl Database Revision', @RG_SC_VERSION, NULL, NULL, NULL, NULL, NULL, NULL

データベースが SQL Compare にロードされると、データベースが主張するバージョンがソース管理に格納されているバージョンに対応していることを確認するためのチェックが実行されます。

お役に立てれば!

于 2012-04-17T21:04:48.437 に答える
5

正直なところ、各データベースのスキーマ番号を格納するだけです。データベースには、ソフトウェア構成管理チームのみが使用するテーブルがあります。このテーブルは現在のバージョンを示しているため、環境全体でどのバージョンがどこにあるかをすばやく確認できます。それは物事を複雑にするだけなので、データベースの外のどこかに置くことについて心配する必要はありません。

本当に安全にしたい場合は、値がハードコーディングされたストアドプロシージャをいつでも作成できると思います。次に、ストアドプロシージャを暗号化して、知らないうちに表示したり改ざんしたりできないようにすることができます。それらのバージョンを変更するときに、spを更新するだけです。システムにアクセスして、コンパイル後にシステムテーブルからストアドプロシージャコードを削除することもできますが、実際にはそうしません。それは問題につながるだけです。

于 2012-04-17T18:32:50.823 に答える
1

私が以前の会社で行ったことは、いくつかのフィールド (メジャー バージョン、マイナー バージョン、ビルド、および適用された日付) を含むテーブルにバージョンを保存して、更新の履歴を保持できるようにすることでした。改ざんを防ぐには、テーブルに適切な権限を設定するだけで十分でした。

DBA にも読みにくくしたい場合は、それらの値を暗号化された文字列としてテーブルに格納できます。このようにして、あなただけがそれらをデコードする方法を知ることができます。

于 2012-04-17T18:45:46.477 に答える