web-dev-qa-db-ja.com

SQL ServerのActive Directoryアカウントに管理者を付与する

SQL Server 2012インスタンスと、Active Directoryユーザーを追加できるActive Directoryグループがあります。そのグループに個人のADアカウント(MyAccount)とサービスアカウント(ServiceAccount)があります。

インスタンス全体に対して、このADグループへの管理アクセスを許可する必要があります。これは、作成されたすべての新しいテーブルとデータベースに対してgrantコマンドを実行する必要がないことを意味します。そのグループのユーザーは、自動的に作成、ドロップ、挿入、選択などを行うことができます。

さらにトリッキーです。私は、Windows認証を使用してMyAccountでログインし(Windowsにログインしてから、ユーザー名とパスワードを再度入力する必要なくSQL Serverにログインし)、ユーザー名とパスワードを入力してServiceAccountを使用してログインできる必要があります。 MSSQLにログインできるようにするために、ServiceAccountを使用してWindowsにログインする(またはそのアカウントでSSMS/SSDTなどを実行する)ことを強制することはできません。

それを構成するためのベストプラクティスは何ですか?

4
Hikari

あなたが求めているもののいくつかは実際にはかなり単純です。

ADグループの権限

ADグループのログインを作成します

CREATE LOGIN [domain\AD Group] FROM WINDOWS

次に、必要なアクセス権を付与します。 Adminアクセスを付与したいとおっしゃっていますが、これがDBAチームでない限り、sysadminのようなものにADグループを追加しません。代わりに、実際に必要なアクセス許可を付与します。あなたが望むように聞こえる

  • db_ddladmin-DB内でオブジェクトを作成/変更する権限を付与するロール。
  • db_datareader-DB内の任意のテーブル/ビューに対してSELECTを実行する権限を付与するロール
  • db_datawriter-DB内の任意のテーブル/ビューに対してUPDATEINSERTまたはDELETEステートメントを実行する権限を付与するロール。
  • EXECUTE-データベース内のすべてのストアドプロシージャまたは関数を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を選択します。

enter image description here

次に、ADログインのログイン/パスワードプロンプトが表示されます。サービスアカウント名とパスワードを入力します。 SSMSが開くと、信頼された(Windows認証)接続は、接続に使用したADログイン(この場合はサービスアカウント)を使用して行われます。

5
Kenneth Fisher

次のコードを使用して、管理者アクセスを付与できます。

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のアクセス許可の階層 ポスターを使用して、特定のアクセス許可の影響の概要を確認しています。

5
Max Vernon