GNU/Linux >> Linux の 問題 >  >> Linux

SQL Server 2017 でシステム カタログを直接変更するにはどうすればよいですか?

!!下部にある太字の警告を必ずお読みください!!

allow updates のサーバー構成オプション は、SQL Server 2005 から機能しなくなりました。ドキュメントには、エラーは発生しないと記載されていますが、実際にはシステム カタログ テーブルへの直接更新は許可されません。

今これを達成する唯一の方法は、これは危険であり、危険ではないことを完全に認識することです 推奨 、専用管理コンソール (DAC) 接続を使用することです。

まず、実際のが必要です 更新するテーブル名。あなたの名前 SELECT from は単なるシステム カタログ ビューであり、実際のテーブルではありません。私は通常、以下を使用します:

EXEC sp_helptext N'sys.{some name here}';

次に、次の操作を行います:

<オール>
  • を使用してシングル ユーザー モードでインスタンスを再起動します。
    sudo systemctl stop mssql-server
    sudo -u mssql /opt/mssql/bin/sqlservr -m
    

    明確にするために:この手順は、システム カタログの更新を可能にするためのものです。他の操作を行うために DAC 自体に接続する場合、シングル ユーザー モードは必要ありません。

  • sa の専用管理コンソール接続経由で接続 または他の sysadmin ログイン。これは、コマンド プロンプト ウィンドウで次のコマンドを実行することにより、SQLCMD 対話型セッションで行うことができます:

    sqlcmd -S admin:localhost -U sa
    

    Linux SQLCMD が何らかの理由でこれをサポートしていない場合は、リモート DAC 接続を有効にしてから、Windows マシンを使用して DAC が機能していることを確認できます。 Linux で DAC を有効にするには:

    EXEC sp_configure 'remote admin connections', 1;  
    RECONFIGURE;  
    
  • その DB で、次のようなことを試してください:

    UPDATE sys.{whatever_name_you_found} {enter}
    SET [some_column] = {some_value} {enter}
    WHERE [some_other_column] = {the_better_be_correct_or_else_ID}; {enter}
    GO {enter}
    

    GO {enter} を挿入するまで、ステートメントは実行されません。 .

  • デンジャー ウィル ロビンソン!!

    システム カタログ テーブルを直接編集する場合は注意が必要です。これは、のみ行うべきことです 他に問題を解決する方法がまったくない場合 (この場合のように)。 直接編集を避ける理由はおそらくいくつかありますが、最初に思い浮かぶのは次の 2 つです。

    • 私たちが作成するデータモデルと同じように、物事がどのように機能するかについて、私たちが気付いていないルールやワークフローが存在する可能性があります (例:非正規化、さまざまなテーブルのデータの状態を管理する「ビジネス」ルールなど)
    • 直接編集を行うと、問題が発生し、サポート契約を結んでいる場合に支援する Microsoft の責任が無効になる可能性が非常に高くなります (サポート契約の条項は見たことがありませんが、そのような文言が含まれていないとは信じられません)。

      @Paul Randal はコメントで次のように確認しています。そのデータベースで」


    簡単な答え:ありません。

    より長い回答:実稼働システムでは決してこれを行うべきではないことに注意してください .サポートされていない/文書化されていないすべての混乱について、MS に電話して助けを求めると、MS は砂を叩くように指示します。

    それはさておき、さあ、行きましょう。

    まず、SQL Server をシングル ユーザー モードで起動する必要があります。質問に「linux」というタグを付けましたが、これがまったく同じように機能するかどうかはわかりませんが、Windows バージョンの場合は、SQL Server サービスを停止してから、「-m」を使用してコマンド ラインから起動します。引数、例:

    cd "\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn"
    sqlservr.exe -m
    

    それが実行されたら、インスタンスの専用管理者接続 (DAC) に接続する必要があります。好きなツールを使用できます。 Management Studio または sqlcmd を使用できますが、オブジェクト エクスプローラーはシングル ユーザー モードで実行されているため、Management Studio では接続できないことに注意してください。いずれの場合も ADMIN: を指定してください サーバー名のプレフィックス。 ADMIN:(local) できると思います ローカルのデフォルト インスタンスに接続します。

    その後、必要なものをほとんど変更できますが、特定のシステム カタログ ビューの実際の基になるテーブルが何であるかを把握する必要があります。例:sys.database_principals .ビューの定義を表示するには、"mssqlsystemresource" データベース (通常は表示されません) に切り替え、sp_helptext を使用します。 システム ビュー/プロシージャ/関数のコードを表示します。

    USE mssqlsystemresource
    GO
    EXEC sp_helptext 'sys.server_principals'
    

    このビューが参照するテーブルの 1 つが master.sys.sysxlgns であることに気付くでしょう。 、これはおそらく開始するのに適した場所です。 pwdhash という名前の列があります。 ハッシュ化されたパスワードを保存しているように見えるこのテーブルに.

    いじくり回しが終わったら、シングル ユーザー モードで SQL Server を実行しているコマンド ウィンドウに移動し、Ctrl-C を押してシャットダウンします。

    マイクロソフトのサポートから具体的な指示がない限り、本番システムに対してこれを行わないでください .それ以外は、楽しんで、インスタンスを壊したときのバックアップがあることを確認してください!


    Linux
    1. OSとLinuxのバージョンを確認する方法

    2. システム上のすべてのSubversionリポジトリを見つける方法は?

    3. システムの再起動が必要かどうかを確認する方法

    1. LinuxシステムのIDを変更する方法

    2. system() の出力をファイルにリダイレクトする方法は?

    3. openldap 2.4 で管理者パスワードを設定する方法

    1. KVMサーバーを高速にセットアップする方法

    2. システム管理者(root)としてコマンドを実行する方法は?

    3. システムのデフォルトの背景画像を変更するにはどうすればよいですか?