ここにはいくつかの異なる質問があるので、個別にノックアウトします。
「ユーザーがsaログインを直接使用せず、代わりにWindows認証を使用することがベストプラクティスであることを読みました」
ここでは、SAの概念と、SQL認証とWindows認証の概念という2つのことを混ぜています。
SQL認証は、すべてのSQL Serverに保存されているユーザー名とパスワードのリストです。SQLに格納されているという事実が最初の問題です。ログインのパスワードを変更する必要がある場合は、すべてのサーバーで変更する必要があります(または、異なるサーバーで異なるパスワードを維持する必要があります)。Windows認証を使用すると、ログインを一元的に無効にしたり、パスワードを変更したり、ポリシーを設定したりできます。
SQL認証の使用を選択した場合、SAは1つのSQL認証ログインにすぎません。AdministratorがWindows認証にあるように、これはデフォルトの管理者ユーザー名です。その1つのインスタンスにローカル超大国がありますが、すべてのインスタンスにまたがるグローバル超大国はありません。
「...これらのアカウント(またはアカウントグループ)のsysadmin特権を許可します。」
どの認証方法を選択する場合でも、理想的には最小限の特権の原則に従うことをお勧めします。仕事を遂行するために必要な最低限の権利を人々に付与することです。
それらを単なるログインと考えないでください-彼らはあなたを解雇することができる人々です。データベースを誤って削除したり、バックアップジョブを無効にしたりしても、デフォルトではSQLがだれが何をしたかを追跡しないため、解雇されません。あなたはそれが起こるだろうから解雇されるだろうし、あなたは誰がそれをやったかを言うことができないだろう。
「ベストプラクティスは、SQL Serverインスタンスのセキュリティをどのように向上させますか?」
次の2つのことを行います。
- 人がサーバーを破壊するのを防ぐ
- 彼らがサーバーを壊したとき、誰がそれをしたのかを正確に特定できるようになる
最初の方法は、最小限の特権の原則で達成されます。人々に必要な権限のみを与え、それ以上は与えません。
2番目の方法は、各ユーザーに独自のログインを許可し、共有ログインを許可せず(全員が同じユーザー名/パスワードを使用できるようにするなど)、理想的にはログインを監査します。おそらく苦痛なので最後の部分はすぐには行いませんが、誰かがデータベースを削除し、上司がその理由を知りたがった後に後で監査を追加できるように、断片を最初に配置しましょう。
あなたが考えていることは知っています。「しかし、我々はアプリをコーディングしているので、アプリにはログインが必要です。」はい、アプリケーションに独自のログインを提供します。開発者はそのパスワードを知る必要がありますが、そのログインは権限を剥奪されて、誰もがそれを使用したくないでしょう。たとえば、db_datareaderロールとdb_datawriterロールのみに必要な場合がありますが、それ以外は必要ありません。そうすれば、データの挿入、更新、削除、選択が可能ですが、必ずしもスキーマの変更、インデックスの追加、ストアドプロシージャの変更などはできません。
「これは本番インスタンスにのみ適用されますか、それとも社内開発インスタンスにも適用されますか?」
私は通常、人々が物事を壊すことを心配しているので、開発インスタンスにも同じように適用されると思います。開発中のサーバーを壊すのが大好きです。そしてもちろん、本番環境に移行するために変更のリストをまとめるとき、特定のインデックスが本当にアプリに不可欠であるかどうか、または一部のボーンヘッドがデータベースチューニングアドバイザーを実行してすべての変更を適用するように指示したかどうかを知る必要があります。適切な許可は、その痛みを軽減するのに役立ちます。