第 5 章 SQL Server 2000 セキュリティの管理と監視~ MCDBA をめざそう!! ~
NRI ラーニング ネットワーク株式会社
技術研修部
清藤 めぐみ
2002年1月11日
はじめに
MCP 試験を受験される方はご存知かと思いますが、Microsoft のサイト(https://www.microsoft.com/japan/learning/mcp/exam.aspx?cert=1&id=70-228 )で試験範囲を確認することができます。一度は目を通しておくことをお勧めします。本連載は、試験トピックスの章立てに併せてポイントを解説していきます。
目次
Windows 認証モードと混合モード
データベースユーザの作成と管理
セキュリティロールの作成と管理
データベースでの権限の設定
キュリティ監査の管理
SQL Server にアクセスし、データベースを操作するには、ログインアカウント、データベースユーザアカウント、権限などが必要になります。
第 5 章では、これらの設定、管理について確認していきます。
「SQL Server 2000 セキュリティの管理と監視」では次の項目がポイントとなります。
Widnows 認証モードと混合モード
データベースユーザの作成と管理
セキュリティロールの作成と管理
データベースでの権限の設定
セキュリティ監査の管理
1. Windows 認証モードと混合モード
SQL Server 2000 にアクセスする場合、ユーザはログインアカウントを持つ必要があります。SQL Server のログイン認証メカニズムには、Windows 認証と SQL Server 認証があります。
Windows 認証
Windows のユーザアカウントもしくはグループアカウントによってアクセスが制御される。
Windows のユーザアカウントもしくはグループアカウントをSQL Serverログインアカウントとして定義する
SQL Server 認証
SQL Server 独自のログインアカウントおよびパスワードを定義する
SQL Server にアクセスするときに、ログインアカウントとパスワードの入力が必要
SQL Server が Windows 上で実行されている場合は、認証モードを選ぶことができます。
Windows 認証モード
Windows 認証のみ使用可能
混合モード
Windows 認証、または SQL Server 認証の両方を使用可能
Windows 以外のクライアントがいる場合は、SQL Server 認証を使用するので混合モードに設定します。
ログインアカウントの管理を行うには、Enterprise Manager を使用するか、システムストアドプロシージャを使用します(表1-1)。
|
Windows 認証 | SQL Server 認証 |
作成 |
sp_grantlogin |
sp_addlogin |
削除 |
sp_revokelogin |
sp_droplogin |
接続拒否 |
sp_denylogin |
|
表 1-1 ログインアカウントの管理
SQL Server 認証の場合は接続拒否の設定はできません。
参照: MSUテキスト「SQL Server 2000 システム管理 (P.43、P.169~171)」
Books Online(認証モード)
2. データベースユーザの作成と管理
ログインアカウントを追加しただけでは、データベースにアクセスできません。ユーザがアクセスするデータベースで、データベースユーザアカウントを作成する必要があります。データベースユーザアカウントを作成する場合、対応するログインアカウントを指定します。
データベースユーザを作成するには、SQL Server Enterprise Manager を使用するか、sp_grantdbaccess ストアドプロシージャを使用します。例えば、Sales1 というログインアカウントを持つユーザのデータベースユーザを作成するには、
sp_grantdbaccess 'Sales1'
を実行します。この場合、データベースユーザ名は、ログインアカウントと同じ Sales1 になります。また、ログインアカウント名とデータベースユーザ名を異なる名前で登録する場合は、
sp_grantdbaccess 'Sales1','S1'
を実行します。この場合、データベースユーザ名は S1 となります。
データベースユーザを削除するには、Enterprise Manager を使用するか、sp_revokedbaccess ストアドプロシージャを使用します。
参照: MSUテキスト「SQL Server 2000 システム管理 (P.180~182)」
Books Online(sp_grantdbaccess、sp_revokedbaccess)
3. セキュリティロールの作成と管理
ロールとは、権限を適用するためにユーザをグループにまとめたものです。ロールには、サーバロールとデータベースロール、アプリケーションロールがあります。
3.1 サーバロール
サーバロールには、あらかじめ権限が定義されている固定サーバロールがあります(表 3-1)。
ロール |
権限 |
---|---|
sysadmin |
SQL Server のすべての権限を持つ |
serveradmin |
サーバ構成の設定 |
setupadmin |
リンクサーバと起動プロシージャの管理 |
securityadmin |
ログイン、CREATE DATABASE 権限の管理 |
processadmin |
SQL Server で実行されるプロセスの管理 |
dbcreator |
データベースの作成、変更、削除 |
diskadmin |
ディスクファイルの管理 |
bulkadmin |
BULK INSERT ステートメントの実行 |
表 3-1 固定サーバロール
固定サーバロールは、サーバ全体で使用できるロールです。
固定サーバロールにログインアカウントを割り当てるには、SQL Server Enterprise Manager または、sp_addsrvrolemember ストアドプロシージャを使用します。また、ログインアカウントを削除するには、sp_dropsrvrolemember ストアドプロシージャを使用します。
3.2 データベースロール
データベースロールには、固定データベースロールとユーザ定義のデータベースロールがあります。固定データベースロールには、表 3-2 のような種類があります。
ロール |
権限 |
---|---|
public |
データベースのデフォルト権限 |
db_owner |
データベースのすべての権限を持つ |
db_accessadmin |
データベースユーザ、ロールの追加、削除の実行 |
db_ddladmin |
データベースオブジェクトの追加、変更、削除 (DDL (Data Definition Language) ) の実行 |
db_securityadmin |
すべての権限、オブジェクト所有者、ロール、ロールのメンバシップの管理 |
db_backupoperator |
DBCC、CHECKPOINT、BACKUPステートメントの実行 |
db_datareader |
データベース内のユーザテーブルのデータの読み取り |
db_datawriter |
データベース内のユーザテーブルのデータの追加、変更、削除 |
db_denydatareader |
データベース内のユーザテーブルのデータの読み取り不可 |
db_denydatawriter |
データベース内のユーザテーブルのデータの追加、変更、削除不可 |
表 3-2 固定データベースロール
固定データベースロールにデータベースユーザアカウントを割り当てるには、sp_addrolemember ストアドプロシージャを使用します。また、データベースユーザを削除するには、sp_droprolemember ストアドプロシージャを使用します。
ユーザ定義のデータベースロールを作成すると、共通の権限を持つユーザをグループ化することができます。ユーザ定義のデータベースロールを作成するには、sp_addrole ストアドプロシージャを使用します。ユーザ定義のデータベースロールを作成できるのは、db_owner または、db_securityadmin ロールのメンバのみです。
3.3 アプリケーションロール
アプリケーションロールは特定のアプリケーションに対して、セキュリティの実装を行い、間接的にデータへのアクセスを制限します。
アプリケーションロールは、以下の点でサーバロールやデータベースロールと異なります。
アプリケーションロールはメンバを持たない
アプリケーションロールにはパスワードが必要
public ロールに適用されている権限を除き、すべての権限が失われる。
アプリケーションロールを作成するには、sp_addapprole ストアドプロシージャを使用します。アプリケーションロールを作成できるのは、db_owner または、db_securityadmin、sysadmin ロールのメンバのみです。
参照: MSUテキスト「SQL Server 2000 システム管理 (P.184~188、P.210~214)」
Books Online (ロール、アプリケーションセキュリティとアプリケーションロール)
4. データベースでの権限の設定
データベースを操作するには、データベースユーザアカウントやデータベースロールにログインアカウントをマッピングしたあと、権限を割り当てる必要があります。
SQL Server の権限は、ステートメント権限、オブジェクト権限、既定の権限の 3 種類があります。
4.1 ステートメント権限
データベースまたは、データベース内のオブジェクトを作成するには、ステートメント権限が必要です。ステートメント権限には、CREATE DATABASE、CREATE TABLE、CREATE VIEW などがあります。CREATE DATABASE などのステートメント権限は、データベース内の特定のオブジェクトに対してではなく、ステートメント自身に適用されます。
ステートメント権限の許可、拒否、取り消しを行うには、以下のコマンドを実行します。
許可 GRANT ステートメント権限 TO データベースユーザ(またはロール)
拒否 DENY ステートメント権限 TO データベースユーザ(またはロール)
取り消し REVOKE ステートメント権限 FROM データベースユーザ(またはロール)
また、SQL Server Enterprise Manager を使用する場合は、データベースのプロパティの「権限」タブで設定します(図 4-1)。
図 4-1 データベースプロパティでのステートメント権限の設定
4.2 オブジェクト権限
テーブル内のデータを操作したり、プロシージャを実行するには、オブジェクト権限が必要です。SELECT、UPDATE、REFERENCES オブジェクト権限はテーブルやビューに設定でき、また、列単位で適用することもできます。その他、ストアドプロシージャに関するEXECUTE 権限があります。
オブジェクト権限の許可、拒否、取り消しを行うには、以下のコマンドを実行します。
許可 GRANT オブジェクト権限 ON オブジェクト名 TO データベースユーザ(またはロール)
拒否 DENY オブジェクト権限 ON オブジェクト名 TO データベースユーザ(またはロール)
取り消し REVOKE オブジェクト権限 ON オブジェクト名 FROM データベースユーザ(またはロール)
また、SQL Server Enterprise Manager を使用する場合は、各オブジェクトのプロパティの「権限」タブで設定します(図 4-2)。
図 4-2 テーブルのプロパティでのオブジェクト権限の設定
4.3 既定の権限
固定ロールのメンバまたは、データベースオブジェクトの所有者のみが特定の操作を実行できます。これらの操作を実行するための権限は既定の権限、または暗黙の権限と呼ばれています。
参照 MSUテキスト「SQL Server 2000システム管理(P.191~193)」
SQL Server 2000リソースキット(P.272~278)
Books Online(権限の管理)
5. セキュリティ監査の管理
SQL Server 2000 では、ユーザのログインの試行、失敗、接続および切断などのイベントをトレースし、監視していくことができます。監査記録を確認するには、SQL プロファイラを使用します。
また、SQL Server 2000 は、米国政府が定めた評価基準 C2 セキュリティ保証を満たしているので、C2 監査を有効にすることができます。C2 監査を有効にすると、すべてのイベントを追跡し、ログファイルを作成します。C2 監査ログファイルが格納されているドライブの空き領域が不足すると、SQL Server が停止します。SQL Server を再起動するには、ディスク領域を開放する必要があります。
参照 MSUテキスト「SQL Server 2000 システム管理(P.431)」
SQL Server 2000 リソースキット(P.266)
Books Online(SQL Server利用状況の監査、C2監査、c2 audit modeオプション)
第 5 章の内容に関しては、トラブルシューティング問題として、出題される傾向があります。C2 監査に関しては、SQL Server 2000 システム管理のテキストには、記載されていませんので、Books Online で確認をしておきましょう!
清藤 めぐみ : 1997 年に Microsoft 認定トレーナ(MCT)の資格を取得し、Windows NT のトレーニングを担当するようになりました。現在は NRI ラーニングネットワークに所属し、Windows 2000 などのトレーニングや、技術書籍の監修を行う毎日で、あっという間に時間が過ぎてしまいます。そんな状態なので、最近はちょっとストレスがたまり気味。ストレス解消のため、ショッピングにはまってしまい、財布の中身が心許ない今日この頃です。 皆さんのご期待にそえるような記事作りをめざしていきます。よろしくお願いします。