SQL Server 2012インスタンスと、Active Directoryユーザーを追加できるActive Directoryグループがあります。そのグループに個人のADアカウント(MyAccount)とサービスアカウント(ServiceAccount)があります。
インスタンス全体に対して、このADグループへの管理アクセスを許可する必要があります。これは、作成されたすべての新しいテーブルとデータベースに対してgrantコマンドを実行する必要がないことを意味します。そのグループのユーザーは、自動的に作成、ドロップ、挿入、選択などを行うことができます。
さらにトリッキーです。私は、Windows認証を使用してMyAccountでログインし(Windowsにログインしてから、ユーザー名とパスワードを再度入力する必要なくSQL Serverにログインし)、ユーザー名とパスワードを入力してServiceAccountを使用してログインできる必要があります。 MSSQLにログインできるようにするために、ServiceAccountを使用してWindowsにログインする(またはそのアカウントでSSMS/SSDTなどを実行する)ことを強制することはできません。
それを構成するためのベストプラクティスは何ですか?
あなたが求めているもののいくつかは実際にはかなり単純です。
ADグループの権限
ADグループのログインを作成します
CREATE LOGIN [domain\AD Group] FROM WINDOWS
次に、必要なアクセス権を付与します。 Admin
アクセスを付与したいとおっしゃっていますが、これがDBAチームでない限り、sysadmin
のようなものにADグループを追加しません。代わりに、実際に必要なアクセス許可を付与します。あなたが望むように聞こえる
SELECT
を実行する権限を付与するロールUPDATE
、INSERT
またはDELETE
ステートメントを実行する権限を付与するロール。EXECUTE
する権限を付与する権限。これを追加するには、各ユーザーデータベースで次のコマンドを実行します。
CREATE USER [domain\AD Group] LOGIN [domain\AD Group]
ALTER ROLE db_ddladmin ADD MEMBER [domain\AD Group]
ALTER ROLE db_datareader ADD MEMBER [domain\AD Group]
ALTER ROLE db_datawriter ADD MEMBER [domain\AD Group]
GRANT EXECUTE TO [domain\AD Group]
これらの権限を新しいユーザーデータベースに追加する場合は、model
データベースでもスクリプトを実行します。
サービスアカウントを使用して接続する
サービスアカウントでアプリケーションを実行している場合、そのアプリケーションが信頼できる認証を使用して接続すると、そのサービスアカウントを使用してSQLに接続します。ただし、SSMSなどを使用してSQLに接続する場合は、2つの選択肢があります。サービスアカウントを使用してマシンにログインするか、別のユーザーとしてSSMSを実行できます。
別のユーザーでSSMSを実行するには、Shiftキーを押しながらSSMSへのショートカットを右クリックし、Run as different user
を選択します。
次に、ADログインのログイン/パスワードプロンプトが表示されます。サービスアカウント名とパスワードを入力します。 SSMSが開くと、信頼された(Windows認証)接続は、接続に使用したADログイン(この場合はサービスアカウント)を使用して行われます。
次のコードを使用して、管理者アクセスを付与できます。
CREATE LOGIN [DOMAIN\ADGroupName] FROM WINDOWS;
GRANT CONTROL SERVER TO [DOMAIN\ADGroupName];
これにより、[DOMAIN\ADGroupName]のメンバーであるすべてのユーザーが、ユーザー名/パスワードを指定せずにSQL Serverにログインできるようになり、すべてのデータベースを含むインスタンス全体への管理者アクセスが許可されます。
コマンドラインアプレット「runas」を使用して、SQL Server Management Studioをサービスアカウントとして「起動」できます。そのための構文は(コマンドラインから)です:
runas /user:<service_account_name> C:\the\path\to\SSMS.exe
付与CONTROL SERVER
この方法でのグループまたはログインへの権限により、特定のオブジェクトまたはデータベースへのDENY
アクセスも可能になります。たとえば、DENY ALTER ON DATABASE::master TO [DOMAIN\ADGroupName];
これらのユーザーがmaster
を変更できないようにし、他のデータベースやテーブルなどを作成および削除することを許可します。CONTROL SERVER
権限は、SQLログインを簡単に作成し、そのログインにsysadmin
アクセスを許可し、master
への制御されていないアクセスを含むSQL Serverのすべてへの完全なアクセス権を持つことができます。これは一般にかなり大きなセキュリティリスクと見なされており、本番以外のボックスでのみ使用される可能性があります。
私は最も優れた SQL Serverのアクセス許可の階層 ポスターを使用して、特定のアクセス許可の影響の概要を確認しています。