SQL Server 2008でActive Directoryグループ全体のセキュリティアクセスを割り当てるにはどうすればよいですか?


40

ドメイン上のすべての内部アプリケーションで統合セキュリティを使用したいと思います。残念ながら、私はこれをうまく機能させることができませんでした。特定のテーブルへの読み取り/書き込みアクセスのために、Exchange(Active Directory)グループ全体にSQL Serverのロールを割り当てたいと思います。そうすれば、誰かが雇われるたびにオペレーターを作成したり、誰かが解雇されたときにオペレーターを削除したりする必要がなくなります。これは可能ですか?これを行うにはどのような手順を実行しますか?

回答:


48
  • ADグループをログインとして設定します。「ログイン」とは、ユーザー/ログインのADの概念ではなく、サーバーレベルのログインを意味します。SQL Serverでは、これはサーバーレベルのプリンシパルです
  • マップされたユーザーを作成します。実際にテーブルのユーザーに直接許可しないでください。「ユーザー」とは、ユーザーというADの概念ではなく、データベースユーザーを意味します。SQLServerでは、これは「データベースレベルのプリンシパル」です。
  • ユーザーをロールに追加(「データベースレベルプリンシパル」も)
  • テーブルのロールに対する権限を付与します(テーブルまたはプロシージャなどは「セキュリティ保護可能」です)

サンプルスクリプト

USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO

sp_addrolememberSQL Server 2012から非推奨になりましたALTER ROLE。代わりに使用する必要があります。


3
SQLユーザー(この場合はADグループ)ではなくロールにアクセス許可を割り当てる必要がある理由を説明すると役立ちます。
ドリューチャピン

「ログインから」ではなく、「ログイン用にユーザーを作成[...]」という意味でしょうか?
アゴスティーノ

... CREATE USERをFOR LOGIN ...。およびCREATE USER ... FROM LOGIN ...; 両方とも私のために働きます(MSSQL2016)。違いがあるかどうかわかりませんか?
リバースエンジニア


4

SQL Server内の許可をADグループに付与するのは比較的簡単です。T-SQLまたはManagement Studioを使用して実行できます。

たとえば、というADグループがある場合MYDOMAIN\APPLICATION SUPPORTは、サーバーレベルでログインを作成し、個々のデータベースへのマッピングを使用して、データリーダーなどのもう少し細かいアクセス許可を付与します。

理想的には、すべてのアプリケーションアクセスはストアドプロシージャを介して行われる必要があるため、そのデータベースのストアドプロシージャに対する実行権限のみが必要です。

*セキュリティの観点から、特定のユーザーが特定のデータを見ることができるようにするために、プロシージャを作成し、そのプロシージャの実行権限のみをユーザーに付与できます。ユーザーが直接クエリできるようにすることは、関連するすべてのテーブルに対する選択権限を与えることを意味します。また、プロシージャの操作が簡単になり、デバッグも簡単になります。

ストアドプロシージャはテーブルアクセスを抽象化し、アクセスを制限します。DBAタイプにとっては、「すべてのインスタンス変数を表示させます。メソッド、ゲッター、またはセッターを使用したくない」のようなものです。


3

「Active DirectoryユーザーグループをSQL Serverのログインとして追加する方法」と回答したmarc_sから:

SQL Server Management Studioで、に移動しObject Explorer > (your server) > Security > Loginsて右クリックしますNew Login

ここに画像の説明を入力してください

次に、ポップアップするダイアログボックスで、表示するオブジェクトの種類を選択し(Groupsデフォルトでは無効になっています-チェックしてください!)、オブジェクトを検索する場所を選択して(たとえば、使用Entire Directory)、ADグループを見つけます。

ここに画像の説明を入力してください

これで、通常のSQL Serverログインができました-単一のADユーザーに対してログインを作成するときと同じです。その新しいログインに、必要なデータベースのアクセス許可を与えてください。

そのADグループのメンバーは、SQL Serverにログインしてデータベースを使用できるようになりました。


2
そのSO回答にリンクすることはおそらく有用ですが、あなたは投稿に新しいものを追加していません。リンクをコメントとして投稿することもできます。
アンドリーM

2
答えには、オブジェクトタイプでグループをチェックするための素晴らしいスクリーンショットがあります。これをしようとしていたときに、それが欠けていたからです。私の意見では、リンクは便利な方法では表示されません。ただ...次の人を助けようと
でも、ミエン

どういう意味ですか?通常、それに従うためのリンクがあり、リンクをたどる全員に、あなたが話している素敵なスクリーンショットと、ここに再投稿した他のすべてが表示されます。議論するつもりはありませんが、私の意見が変わっていないことをあなたに知らせるだけです:(コメント内の)リンクも同様に機能します。
アンドリーM

4
私の意見も変わりません。コメント内のリンクは、Webページ上の実際の画像と同じ情報を伝えません。「見せて、言わないで」
ミエン

1

ユーザーがSQLでSysadmin権限を持つDOMAIN \ SecurityGroupのメンバーである場合、データベースにアクセスするときにその権限が使用されます。それ以外の場合は、各データベースでDOMAIN \ SecurityGroup(s)に権限が付与されているものを調べる必要があります。ユーザーが2つのSecurityGroupsのメンバーであり、SecGroupAに選択権限があり、SecGroupBに挿入権限がある場合、ユーザーは選択して挿入できます。

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