ほとんどのSQL Serverデータベースでは、多数のユーザーがデータを閲覧・アクセスするため、セキュリティは管理者にとって大きな懸念事項となります。賢明な管理者は、ユーザーグループに権限を付与・拒否するSQL Serverのセキュリティロールを最大限に活用し、セキュリティの負荷を大幅に軽減します。
お客様のデータを保護する最初のステップは、どのユーザーがどのデータを閲覧する必要があるかを判断し、それらのユーザーのみにアクセスを許可することです。例えば、給与担当者は社内の全員の給与明細を閲覧できる一方、チームマネージャーはチームメンバーの給与明細にアクセスできます。個々の従業員が給与明細を閲覧する必要は全くありません。
また、どのユーザーがデータを変更できるかを決める必要があります。例えば、フルフィルメント担当者は顧客の住所を確認する必要があるかもしれませんが、そのアカウントの住所を変更できるのはアカウントエグゼクティブまたは特別な訓練を受けたデータ入力担当者のみにしたい場合があります。
Windowsのセキュリティモデルがなければ、多数のユーザーに対応するのは大変な作業になるかもしれません。Windowsのセキュリティモデルでは、1つのロールで多くのユーザーを簡単に管理できます。ロールは、データベース内でユーザーが実行できる操作と実行できない操作を定義し、複数のユーザーが同じロールを共有できます。ここでは、ロールとWindowsグループとの関係について説明し、ロールを使用して複数のユーザーへのアクセスを同時に許可または拒否する方法を説明します。
ロールを使用する利点
ロールは階層型セキュリティ モデルの一部です。
- ログインセキュリティ- サーバーへの接続
- データベースセキュリティ- データベースへのアクセス
- データベースオブジェクト- 個々のデータベースオブジェクトとデータへのアクセス
まず、ユーザーはパスワードを入力してサーバーにログインする必要があります。サーバーに接続すると、保存されているデータベースへのアクセスはユーザーアカウントによって制限されます。実際のデータベースにアクセスできるようになると、ユーザーは閲覧および変更できるデータに制限されます。
ロールの主なメリットは、効率的な管理です。1,000人のユーザーグループが突然、新しいデータを表示または変更する必要に迫られたと想像してみてください。Windowsセキュリティを使用すれば、既存のWindowsグループを選択し、それをSQL Serverロールに割り当てるだけで済みます。1,000人のユーザーアカウントを変更する必要はありません。WindowsグループはWindowsネットワークにアクセスできるユーザーで構成されますが、SQL ServerロールはSQL Serverにのみ属します。つまり、有効なWindowsユーザーにSQL Serverのデータとオブジェクトへの権限を付与するだけです。
ロールの種類
サーバーロールはデータベース管理者(DBA)によって管理され、個々のデータベースファイルではなくサーバー全体に適用されます。public ロールは、すべてのユーザーの基本的なデフォルト権限を設定します。SQL Server に追加されたすべてのユーザーは自動的に public ロールに割り当てられるため、何もする必要はありません。データベースロールは個々のデータベースに適用されます。
定義済みのデータベース ロール
独自のロールを作成する必要がある場合もありますが、いくつかの定義済みのデータベース ロールにアクセスできます。
- db_owner: メンバーはフルアクセス権を持ちます。
- db_accessadmin: メンバーは Windows グループと SQL Server ログインを管理できます。
- db_datareader: メンバーはすべてのデータを読み取ることができます。
- db_datawriter: メンバーはテーブル内のデータを追加、削除、または変更できます。
- db_ddladmin: メンバーはダイナミック リンク ライブラリ (DLL) ステートメントを実行できます。
- db_securityadmin: メンバーはロールのメンバーシップを変更し、権限を管理できます。
- db_bckupoperator: メンバーはデータベースをバックアップできます。
- db_denydatareader: メンバーはデータベース内のデータを表示できません。
- db_denydatawriter: メンバーはテーブルまたはビュー内のデータを変更または削除できません。
固定ロール
固定サーバー ロールはサーバー全体に適用され、いくつかの定義済みサーバー ロールがあります。
- SysAdmin: どのメンバーもサーバー上であらゆるアクションを実行できます。
- ServerAdmin: どのメンバーもサーバー上の構成オプションを設定できます。
- SetupAdmin: すべてのメンバーがリンク サーバーおよび SQL Server の起動オプションとタスクを管理できます。
- セキュリティ管理者: どのメンバーもサーバーのセキュリティを管理できます。
- ProcessAdmin: どのメンバーも SQL Server で実行されているプロセスを強制終了できます。
- DbCreator: すべてのメンバーがデータベースを作成、変更、削除、復元できます。
- DiskAdmin: すべてのメンバーが SQL Server ディスク ファイルを管理できます。
- BulkAdmin: どのメンバーでも一括挿入コマンドを実行できます。
ロールの割り当て
SQL Server Enterprise Manager を使用して、Pubs データベース(SQL Server 2000 に付属するサンプルデータベース)のロールに Windows グループを追加してみましょう。まず、Guests グループのメンバーが SQL Server にアクセスできるように、ログインを作成します。そのためには、以下の手順に従います。
- Enterprise Manager を起動し、セキュリティ フォルダーを展開します。
- 「ログイン」項目を右クリックし、表示されるサブメニューから「新しいログイン」を選択すると、図Aに示す「新しいログイン」ダイアログボックスが開きます。この場合、「Windows認証」が既に選択されていることに注意してください。システムで選択されていない場合は選択してください。ここでは、SQL Serverの混合モードではなく、Windows認証モードを使用します。(混合モードは、WindowsセキュリティとSQL Server独自のセキュリティモデルで構成されています。SQL Serverを使用する場合は、Windows認証が推奨されるセキュリティモデルです。)
図A |
![]() |
SQL Server に新しいログインを追加します。 |
- 名前コントロールの右側にあるボタンをクリックすると、図Bに示す「SQL Server ログイン プロパティ - 新しいログイン」ダイアログ ボックスが表示されます。適切な Windows グループ(ここでは「Guests」アカウントを使用します)を選択します。「追加」ボタンをクリックし、「OK」をクリックして「SQL Server ログイン プロパティ - 新しいログイン」ダイアログ ボックスを閉じます。
図B |
![]() |
ゲストグループを選択します。 |
- 「全般」タブの「データベース」ドロップダウンリストから「Pubs」データベースを選択します。デフォルトでは「Master」データベースが選択されていますが、このデータベースはSQL Serverのインストールを管理するため、ユーザーにアクセス権を付与しないでください。
- 現在のサーバー上で使用可能なデータベースを表示するには、「データベース アクセス」タブをクリックします。
- SQL Server がデータベースロールを有効にする前に、既定のデータベースを選択する必要があります。図 Cに示すように、Pubs を選択します。Public ロールは自動的に割り当てられます(事前に説明したとおりです)。この時点では、任意のロールを選択できます(別の方法については、次のセクションで説明します)。また、Guests グループが User 列に表示されていることに注意してください。
図C |
![]() |
Pubs SQL Server サンプル データベースを選択します。 |
- 「OK」をクリックしてプロセスを完了します。Enterprise Managerの右側のペインに新しいログイン情報が表示されます(図D)。これで、Windows GuestsグループのすべてのメンバーがSQL Serverにサインオンできるようになります。
図D |
![]() |
Enterprise Manager に新しいログインが表示されます。 |
定義済みロールを割り当てる別の方法
前のセクションで説明したように、Guests グループを Pubs データベースの任意のロールに追加することもできます。このセクションでは、Guests グループを Pubs データベース内の db_accessadmin ロールに追加する別の方法を紹介します。手順は以下のとおりです。
- Enterprise Manager で、Pubs フォルダを展開します。
- [ロール]項目をダブルクリックします。
- 右側のペインで db_accessadmin をダブルクリックして、[ロールのプロパティ] ダイアログ ボックスを開きます。
- 「追加」ボタンをクリックすると、ユーザーとグループのリストが表示されます。図Eに示すように「ゲスト」を選択し、「OK」をクリックします。
図E |
![]() |
ゲストログインを選択します。 |
- 図 F は、 Guest ログインを db_accessadmin ロールに追加した後の「データベース ロールのプロパティ」ダイアログ ボックスを示しています。
図F |
![]() |
Guest グループを db_accessadmin ロールに追加しました。 |
- タスクを完了するには、[OK] をクリックします。
この時点で、WindowsのGuestグループがSQL Serverログインに追加され、GuestグループがPubsデータベースのdb_accessadminロールに割り当てられました。これで、GuestグループのメンバーはPubsデータベース内のdb_accessadminロールの権限(上記参照)を継承するようになります。
新しいデータベースロールの作成
db_accessadmin などの定義済みロールは必ずしも適切ではありませんが、新しいロールを作成することができます。ここでは、Purchasing という新しいロールを追加してみましょう。
- Enterprise Manager に戻り、データベース ロールが表示されている右側のペインの任意の場所を右クリックします。
- 表示されるサブメニューから「新しいデータベース ロール」を選択します。
- 「名前」テキストボックスに新しいロールの名前として「購買」と入力し、「追加」ボタンをクリックします。「権限」ボタンは無効になっていることに注意してください。(これについては後で説明します。)
- 「追加」ボタンをクリックして、ユーザーまたはグループをロールに割り当てます。今回は「Guest」グループを追加しました(図E参照)。図Gに示すように、Pubsデータベースに「Purchasing」という新しいロールを作成しました。
- [OK] をクリックしてダイアログ ボックスを終了します。
図G |
![]() |
Purchasing という名前の新しいロールを作成します。 |
Pubsデータベースに新しい購買ロールを作成したら、Guestグループ経由で購買ロールに割り当てられたユーザーがPubsデータベースで実行できる操作を定義する必要があります。ここでは、新しい購買ロールにいくつかの権限を設定しましょう。
- Enterprise Managerの右側のペインで、先ほど作成した購買ロールをダブルクリックして再度開きます。「権限」ボタンが有効になります。
- 「権限」ボタンをクリックして、「データベースロールのプロパティ」ダイアログボックスを開きます。Pubsデータベース内のすべてのオブジェクトに権限を設定できます。例えば、図Hに示すように、Authorsテーブルの横にある「DELETE」オプションにチェックを入れると、このロールのすべてのメンバー(Guestグループのメンバー)がAuthorsテーブルからレコードを削除できるようになります。
- Authorsテーブルを選択すると「列」ボタンが有効になったことにお気づきですか?このボタンをクリックして「列の権限」ダイアログボックスを表示してください。テーブル内では、個々の列へのアクセスを制限できます。列レベルの権限は設定しないので、「OK」を2回クリックして、PurchasingロールにDELETE権限を追加します。これで、Purchasingロールに割り当てられているすべてのグループのメンバーが、Pubs Authorsテーブルからデータを削除できるようになりました。現時点では、削除できるのはGuestグループのメンバーのみです。
図H |
![]() |
購買ロールに削除権限を追加します。 |
サーバーロール
サーバーロールは広範囲に及ぶため(上記のリストを参照)、原則として、ユーザーをサーバーロールに割り当てることはまずないでしょう。サーバーロールは個々のデータベースだけでなく、SQL Serverインスタンス全体に適用されるため、割り当てる際には慎重に検討してください。サーバーロールは通常、データベース管理者とサーバー管理者専用です。
ユーザーをサーバー ロールに割り当てるには、Enterprise Manager を使用するか、クエリ アナライザを使用するかの 2 つの方法があります。Enterprise Manager を使用して、データベース クリエーター サーバー ロールにゲスト アカウントを追加するには、次の手順を実行します。
- セキュリティ フォルダーを展開します。
- [サーバー ロール] 項目をダブルクリックします。
- 右側のペインで「Database Creators」をダブルクリックします。
- ロールに Windows グループを選択するには、[追加] ボタンをクリックして [メンバーの追加] ダイアログ ボックスを開きます。
- Windows ゲスト グループを選択し、[OK] をクリックしてダイアログ ボックスを閉じ、図 Iに示す [サーバー ロールのプロパティ] ダイアログ ボックスにゲスト グループを追加します。
図I |
![]() |
データベース作成者サーバー ロールにゲストを追加します。 |
- 2つのタブがあります。「全般」タブではロールにログインを割り当て、「権限」タブではサーバーロールが実行できるSQLコマンドを選択します。
- プロセスを完了するには、「OK」をクリックします。
クエリ アナライザを使用するには、次のシステム ストアド プロシージャを実行します。ここで、name はユーザーを識別し、role は上記のいずれかのロールです:
Exec sp_addserverrolemember name , role
たとえば、次のステートメントはMartin ReidをSysAdminロールに追加します:
Exec sp_addserverrolemember “Martin Reid”, “SysAdmin”
決して簡単なことではありません。
データは資産であり、ほとんどの企業にとって金銭的価値があり、保護する必要があります。Windows認証は、SQL Serverデータベースへのロールの追加プロセスを簡素化します。簡単ではありませんが、WindowsはSQL Serverインスタンスの管理を支援します。ロールを実際に使用する前に、SQL ServerとWindowsのセキュリティについて理解しておきましょう。
システム ストアド プロシージャとは何ですか?
SQL Serverには、サーバーの様々な領域の管理に役立つストアドプロシージャが付属しています。ストアドプロシージャの全リストは、MicrosoftのMSDNサイトでご覧いただけます。