開発ボックスに対する開発者へのSA特権の付与


8

私たちの激しい抗議にもかかわらず、私たちの経営陣は、開発チームに開発サーバーに対する「sa」権限を付与する必要があると決定しました。キャッチは、私たち、DBサポートグループがまだこのボックスを維持する責任があるということです。

私たちは今、これらの強化された特権を持つ開発チームのために、すべきこととすべきでないことのリストを思いつくことを任されています。

このリストに追加してください:

DO-開発中のDBにアクティビティを制限する

しない -

  • SQLインスタンスの設定を変更する
  • sp_configure(cmdshellを含む)
  • セキュリティ設定の追加/変更/削除
  • データベースオブジェクトの追加/変更/削除
  • バックアップデバイスやリンクサーバーなどのサーバーオブジェクトの追加/変更/削除
  • 複製の追加/変更/削除
  • メンテナンスプランの追加/変更/削除
  • チームに属していないデータベースに触れる

これらのユーザーの活動を追跡するために利用できるツールへのポインタは大歓迎です。


1
SAのより高いレベルの特権を必要とするために、彼らはどのようなタスクを実行する必要がありますか?

私はdb_ownerが彼らが必要とするすべてであると思います...

5
「データベースオブジェクトの追加/変更/削除」をしないようにアドバイスされている場合、何をすべきですか?開発ボックスを持つことの要点は、それを壊すことができるということではありませんか?
スチュアートエインズワース

これらはアプリケーション開発者です。Dev Studioでストアドプロシージャをデバッグするには、「sa」権限が必要です。決定はすでに経営陣によって行われており、彼らはびくびくすることを望んでいません。私たちは潜在的な頭痛を最小限に抑えようとしています

2
質問に+1します。その問題を数回目にしたためです。別の解決策:開発者がSQLをサンドボックス化したVMを100%ボスにする。彼らはまた、それを生かしておくことについて100%責任があります:)-> DEVが自分のシステムを壊さないことをどれほど速く学習するかは驚くべきことです:)
Martin S. Stoller

回答:


8

手遅れにならない場合は、権限をアップグレードしたり、開発者の既存のアカウントを置き換えたりするのではなく、うまく機能する1つの妥協案として、昇格した権限が必要な場合にのみ使用する別のアカウントを作成します。

したがって、通常、これらは個別の「制限された」アカウントで機能します(これらの制限されたアカウントには、依然としていくつかの大きな権限が必要です(つまり、テーブルの作成、削除、変更)。ただし、必要と思われるまれな場合にはsa、このアカウントを使用してログインできます。次に、ログでアカウントにフラグを付け、追加の監視を行うことができます。開発者に要求したアクセス権を与えましたが、その方が少し制御しやすくなっています。

最終的に、悪用があった場合、このアカウントのログは、それを奪う証拠として使用できます。


6

それは言いますが、システム管理者(SA)を必要とする(MSDN)ここでは SQL Server 2005の上のデバッグに。

ただし、このSOの質問は、saを使用しない別の方法示しています。単に実行を許可するsp_sidedebug

また、他の問題も解決するローカルSQL Expressを提供することをお勧めします...

(より多くの情報で編集)

W.クレイグトレーダーの回答の後に編集

最悪の場合の「sa」権限に関するその他の問題:

  • 開発者は信頼できないCLRアセンブリを作成します
  • 彼らはxp_cmdshellを使用します
  • すべてのアクションは、SQLサーバーサービスアカウントのコンテキスト内にあります
  • 彼らはクライアント接続のsa権限を引き継ぎます
  • などなど

例えば xp_cmdshell 'scm -Action 6 -Server PRODSERVER'


1
行外でコードを作成する開発者への答えは、「ユーザーによって実行されるように」ロックされた状態で継続的な統合を行い、それに応じてビルドを失敗させることです。ビルドサーバーにデータベースを最初から再作成し、テストデータを入力します(もちろんすべてSCMから)。(私の場合、アプリケーションインストーラーが新しいデータベースを作成するために使用するコードとまったく同じコードを使用したため、インストーラーとアプリケーションをテストしました。)

1
@クレイグトレーダー:機能しません。私の古い答えを言い換えると、開発者は信頼できず、integratiointegrationsnがすべてのケースを検出するわけではありません。私は開発者dbaです。クライアントのコードモンキーは私の敵です。私の会社では、私は勝っています...その列車セットであり、私は最も低い共通分母を扱います...
gbn

どうやら、あなたのマイレージは異なる場合があります。私の経験では、通常、方法と理由を説明するために少しのトレーニング/オリエンテーションを行う必要がありましたが、その後は通常、かなりうまくいきます。もちろん、私は常に、開発を超えたビルドは、厳密に制御されたビルドサーバーからのものであると常に主張しています。構成。私はこれを、多くの企業にまたがる小さなチームと大きなプロジェクトで、常に成功してきました。

4

私が提案しているのは、ポリシーベースの管理を設定し、すべての「実行」および「実行しない」をポリシールールとして適用することです。これは、インスタンスを保護するのに大いに役立ちます。

また、DDL変更監査も展開します。「SQL Server 2008での監査」を参照してください。抑止力ではなく、ほとんどが変更追跡システムであるため、何かおかしくなったときに、少なくとも何が変更されたかがわかります。


3

DEVELOPMENTサーバーの場合、DEVELOPERSが完全なアクセス権を持つことができる問題は何ですか?データベースオブジェクト(例:テーブル、列、インデックス)を追加/削除/変更できないことを開発者に伝えることは、「コンパイラは使用できるが、実行は許可されていない」と伝えるのと同じです。開発者は、独自のデータベースインスタンスへのアクセスを望んでいる/必要としているように見えます。特に、PRODUCTIONまたはTESTデータベースをいじる必要なしに、問題を解決するさまざまな方法をテストできるようにします。あなたはそれを落胆させるのではなく、そのような行動を奨励すべきです。

開発者がSQL Expressのローカルインスタンスで作業することを提案する人もいますが、開発者ごとのSQL Expressは特定の問題を解決できますが、別のサーバー上の完全なSQL Serverとは異なる制限とパフォーマンス特性があります。

行うべきことは、定期的なバックアップスケジュールを設定し(少なくとも毎晩)、開発者と協力して、スケジュールされていないバックアップを開始し、バックアップから復元する方法を確実に理解して、問題が発生した場合のダウンタイムを最小限に抑えることです。


あなたのアナロジーは完全に間違っています。何が起こるかというと、彼らはあちこち動き回って、それから、いじめられているサーバーをロックダウンされたサーバーに移行できない場合に何が起こるかです。私はもちろん開発者DBAです:-)
gbn

その後、少しの教育が整います。私は頻繁にDBAである開発者です。両方の世界に足を踏み入れて、通常は両方の側に共存することを教えるのが私の仕事です。結局のところ、それはDBAや開発者ではなく、敵であるUSERです...

また、メンテナンスプランなど、アクセスしてはならないものもあります。
Joel Coehoorn、2009年

1
問題は、複数のDevグループがあり、このサーバーがすべてのDBをホストしていることです。「sa」権限を必要とするこのグループは、データベースの33%しか所有していません。懸念は、彼らがねじ込み、サーバーをダウンさせ、他のグループにも影響を与える可能性があることです。彼らが失敗したことを証明することができない限り、会社はそれらのために別々のハードウェアを得ることを望んでいません。

2
それはばかげています。各開発グループには独自のサーバーが必要です。これにより、誰も他の人のつま先を踏まないようにすることができます。最近のハードウェアは実質的に無料で、ソフトウェアはハードウェアとほぼ同じくらい安価です。また、組織が複数の開発グループを持つのに十分な大きさである場合、サーバー仮想化を使用する必要があります。これにより、これらすべてがさらに簡単になります。

3

そののdevのサーバーではなく、DBサポートグループサーバー、またはプロダクションサーバー。適切なバックアップ/イメージを保持し、開発者にハッキングを許可します。DBAがdevboxを制御できるようにすることは、尾に犬を振らせるようなものです。開発者が開発者の作業を行うためにあります。これには、時々物事を壊してテーブルを削除し、それらを別の設定で戻すことが含まれます。開発用ボックスは、しばらくすると常に壊れた状態になります。それが私たちの仕事です。問題が発生している場所がわからない場合は、さまざまなことを試します。元に戻すのが簡単なものもあれば、そうでないものもあります。


ここでの問題は、開発者が作成したアプリが常に同じ権限を持っているわけではないことを開発者が忘れやすいことです。はい、提供しますsa。ただし、デフォルトでsaにならないようにしてください。適切にデプロイするために少し余分な作業が必要なことを行っていることを認識できるようにします。
Joel Coehoorn、2012

1

私は、彼らが開発ボックスに対するSA特権を必要としているとは思いません。ほとんどの場合、彼らはなしで行うことができます。

ローカルの開発版をインストールすることをお勧めします。

質問:

開発者にデータベースオブジェクトの追加/変更/削除を望まない?!! 彼らはどのように成長するのでしょうか?


混乱については申し訳ありません。その箇条書きの意味は、開発者はデータベース設定を変更したり、データベースを削除したりしてはならないということです。

1

すべてのデータベース構造の変更は、スクリプトでも(devでも)実行し、subversionに保存する必要があります。次に、設定されたスケジュールに従って、製品から開発を更新します。開発サイクルの元の場所に戻るには、スクリプトを再実行する必要があります。これにより、すべてがスクリプトを介して実行され、展開の準備が整ったときにスクリプトを準備することができます。

2008年にデータベースの構造変化を追跡するためにDDLトリガーを設定できることを知っていますが、2005年にこれを実行できますか?このようにして、少なくとも誰かが設定を変更したときにそれを実行した人を見つけ、その理由を知ることができます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.