sql >> データベース >  >> RDS >> Sqlserver

SQLServerに汚い仕事をさせるのをやめなさい

    次のような「ダーティワーク」を実行するためのSQLServerの要件に関連する「問題」をよく目にします。

    • トリガーで、ネットワークとの間でファイルをコピーする必要があります
    • ストアドプロシージャはファイルをFTPで転送する必要があります
    • バックアップが完了したら、SQL Serverで圧縮し、コピーを作成してからアーカイブする必要があります
    • 顧客が追加されたら、新しいデータベースを作成し、ActiveDirectoryでさまざまなことを実行したいと思います
    • SQL Serverエージェントジョブは、ディレクトリでファイルをスキャンし、新しいファイルが見つかったときに一括挿入を実行する必要があります

    これは完全なリストではありません。私はおそらくページを埋めることができます。重要なのは、SQL Server内からこれらのタスクを実行すると、重大な障害が発生するということです。

    セキュリティ

    通常、SQL Serverにファイルシステムまたはその他のOSレベルのアクセスが必要であると思われる場合は、(a)SQL Serverサービスアカウント(および/またはSQLエージェント/プロキシアカウント)に明示的な自由裁量権を付与します。または(b)SQL Serverサービスアカウントを、これらのすべての権限を既に持っている既存のドメインアカウントとして実行するように設定するだけです。これは「簡単な」ソリューションです。このフォルダとその共有およびこの他のリソースへのアクセスを個別に許可する代わりに、すでにドメイン管理者であるため、手を拭くだけです。次に、デフォルトでは無効になっているが、上記のタスクの1つ以上を実行する妨げになっているサーバーレベルの設定を有効にします(例:xp_cmdshell

    これらの行動が表すことができる曝露のレベルを説明する必要はないと思います。または、これが実際の従業員アカウントであり、その従業員が去った場合、または彼らが去る前に不満を持っていると判断した場合、どのような問題が発生する可能性があります。うわぁ。すべてのSQLServerに共通のアカウントが使用されているケースをいくつか見てきました。数十または数百のSQLServerインスタンスによってアクティブに使用されているドメインアカウントのパスワードを変更する必要がある場合はどうなるでしょうか。そのユーザーをパスワードリセットポリシーから除外しないと、どのくらいの頻度で発生するか気にしないでください。

    パフォーマンス

    セキュリティの問題に加えて、データベースサーバーの外部に移動すると、SQL Serverが制御できない外部プロセスに依存しているため、遅延が発生する可能性があります。データベーストランザクションは、ファイルが圧縮されてコピーされるのを待つ必要がありますか、FTP転送が完了するのを待つ必要がありますか、それともバックアップドメインコントローラーが応答するのを待つ必要がありますか?複数のユーザーが同様のタスクを実行し、すべてが同じ帯域幅やディスクヘッドを求めて競合している場合、これはどのように複雑になりますか?また、SQL Serverがバッチファイルに何かを実行するように指示すると、含まれているトランザクションがロールバックされると、外部アクションをロールバックできないことを考慮する必要があります。

    答え

    ええと、通常–そして常に例外があります–答えは、実際にはSQLServerの外部にあるこれらのタスクに外部プロセスを使用することです。 PowerShellを使用し、C#を使用し、バッチファイルを使用します。一体、VBScriptを使用してください。これらのタスクのどれが本当に*すぐに*処理される必要があるか、そしてトランザクションがまだアクティブである間に考えてください–私は多くはないと思います。これらのキューテーブルを作成し、トランザクション内のキューテーブルに書き込みます(トランザクションが成功しなかった場合はロールバックされます)。次に、キューテーブルの行を消費し、関連するタスクを実行し、各行を削除または完了としてマークするバックグラウンドタスクまたはスクリプトを用意します。追加のボーナス:ここではSQL Serverエージェントは必要ないため、任意のエンタープライズスケジューラを使用でき、この方法はSQLServerExpressでも機能します。


    1. SQL Server Management Studio(SSMS)とは何ですか?

    2. ORA-12557 TNS:プロトコル・アダプタをロードできません

    3. AWSEC2からAWSRDSへのOracleデータベースの移行、パート2

    4. MySQLの重複行を削除します(主キーを無視します)