次の方法で共有


(初心者)SQL Server 2005 Express Edition Windows認証の運用方法について

質問

2009年5月28日木曜日 3:22

はじまめして、うーたんと申します。

クライアントは、WindowsVista(一般ユーザー権限)
サーバーは、Windows2000Server(SQL Server 2005 Express Edition)の
クライアントサーバー形態で運用するシステムを開発中です。
ネットワークは、Active Directoryで構成されていて、
SQL Serverへの接続は、Windows認証です。

そこで、以下の問題にぶつかってしまい困っています。
1.クライアントからSQL Serverへ、SQL Server Management Studio Express
を利用して接続テストをしたのですが、
接続まではできるのですが、
データベースをクリックしたところでエラーが発生します。
エラー内容は、「データベース XXXX にアクセスできません。
(Microsoft.SqlServer.Express.ObjectExplorer)」です。
管理者権限であれば、問題なくデータベースの内容(テーブルなど)を見ることができます。
何が原因か、いろいろ検索してみましたが不明です。
一般ユーザー権限でもデータベースにアクセスできるようにするには
どのような設定が必要なのでしょうか。
2.Windows認証の場合、
Windows2000Serverの「コンピュータの管理」の
「ローカルユーザーとグループ」のユーザーに
クライアントのユーザー/パスワードを登録することで
接続できると思っているのですが、
そもそも、この考え方が間違っているのでしょうか。
ActiveDirectoryであるというのも何か原因があるのでしょうか。

初心者で申し訳ありません。
ご存知の方のご回答をお願いいたします。

すべての返信 (7)

2009年5月28日木曜日 4:32 ✅回答済み | 2 票

こんにちは、naginoです。

Windows の操作(ログオンなど)については Windows のユーザーに応じて権限が付与されます。
SQL Server のインスタンスレベルの操作(接続など)については SQL Server のログインに応じて権限が付与されます。
SQL Server の DB レベルの操作(DBに接続する、SELECT 文を実行するなど)については SQL Server のデータベースユーザーに応じて権限が付与されます。
http://technet.microsoft.com/ja-jp/library/ms191465(SQL.90).aspx
(Windows のユーザーについては、上記ページでは「Windows ~ ログイン」と表記されています。)

若干語弊がありますが、初期状態ではおおよそ以下のようなイメージです。
Windows の管理者権限を持ったユーザーは、自動的に管理者権限を持った SQL Server ログインと紐づきます。
管理者権限を持った SQL Server ログインは自動的に DB の管理者権限を持ったデータベースユーザーと紐付きます。
一方で一般ユーザーについては、ローカルユーザーであれば、自動的に SQL Server への接続権限のみをもったログインと紐付きます。
DB への接続権限を持つユーザーとは紐付きません。

今回はデータベースユーザーの権限不足といいますか、使用している SQL Server のログインが操作対象のデータベースにマッピングされていないことが原因だと思われます。
使用している Windows のユーザーに対応するログインを作成し、合わせて操作したい DB へのマッピングと権限の設定(ロールの付与)を行うのがひとつの対処方法になります。
以下のページにある「Express 基本操作」というドキュメントの 4 章「ユーザーの作成」が参考になるかと思います。
http://msdn.microsoft.com/ja-jp/sqlserver/cc720684.aspx

あるいは以下を参考の上、管理者権限で設定してください。
http://technet.microsoft.com/ja-jp/library/ms345296(SQL.90).aspx
http://technet.microsoft.com/ja-jp/library/ms365317(SQL.90).aspx
http://technet.microsoft.com/ja-jp/library/ms189425(SQL.90).aspx

ログインとデータベースユーザーは、初めはなかなか分かりづらいところですが、SQL Server を扱う上ではベースとなる事項ですので、しっかり理解されることをお勧めします。

MCITP(Database Developer/Database Administrator)


2009年5月28日木曜日 5:11 ✅回答済み | 1 票

ちょっと資料は古いですが、考え方は同じなので以下の記事もわかりやすいと思います。

第 4 章 SQL Server 2000 のユーザーと権限 ~ SQL Server 一年生 - データベース基礎編 - ~
http://technet.microsoft.com/ja-jp/library/cc707350.aspx

★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/


2009年6月1日月曜日 2:12 ✅回答済み

こんにちは、naginoです。

オーソドックスな方法で、特に問題ないかと思います。

あとはログインの用途に応じて Default database と Server Role と Database role を選択することで、多くのケースに対応できます。

ex.) 特定 DB の管理・開発を行うログインのため、特定 DB に関する全権を付与したい
⇒ Default database : 特定 DB
⇒ Server role : Public (デフォルトのまま)
⇒ Database role : db_owner + Public

ex.) インスタンス全体の管理を行うログインのため、インスタンス内全ての DB に関する全権を付与したい
⇒ Default database : master
⇒ Server role : serveradmin + Public
⇒ Database role : 特に設定の必要なし

ex.) アプリケーションから複数の DB に対して SELECT / INSERT / DELETE / UPDATE を実行するために使用する
⇒ Default database : 最もよく使用する DB
⇒ Server role : Public (デフォルトのまま)
⇒ Database role : 各 DB 毎に db_datareader + db_datawriter (+Public)

ちなみに、ご存知だとは思いますが、Server role については以下にまとまっています。
http://technet.microsoft.com/ja-jp/library/ms188659.aspx (用途がまとまっています。2008 用ですが、概ね 2005 と同様です。)
http://technet.microsoft.com/ja-jp/library/ms175892(SQL.90).aspx (具体的に可能な操作・権限が列挙されています。)

また、Database role については以下にまとまっていますのでよろしければご確認ください。
http://technet.microsoft.com/ja-jp/library/ms189121.aspx (用途がまとまっています。2008 用ですが、概ね 2005 と同様です。)
http://technet.microsoft.com/ja-jp/library/ms189612(SQL.90).aspx (具体的に可能な操作・権限が列挙されています。)

ご参考になれば幸いです。

MCITP(Database Developer/Database Administrator)


2009年5月28日木曜日 5:30

naginoさん、ご回答ありがとうございます。

教えていただいた、ログイン、データベースユーザー、スキーマの設定については
「Express 基本操作」に設定方法が記述されていてわかりやすかったです。

考え方を整理してトライしてみます。
また、報告いたします。


2009年5月28日木曜日 9:09

trapemiyaさん、ご回答ありがとうございます。

わかりやすい資料ですね。
一通り目を通してみます。
また何かありましたら、是非お願いいたします。

ありがとうございました。


2009年6月1日月曜日 1:29

naginoさん、trapemiyaさん

報告が遅くなり申し訳ありません。
以下の内容で設定して、うまく接続できることを確認しました。

まず、環境についてですが、
ドメインコントローラ(ActiveDirectory)のサーバーA、
SQL Server 2005 Express EditionのサーバーBです。
サーバーAでは、サーバーBや各クライアントPCのユーザー名を管理しています。

設定内容ですが、
SQL Server Management Studio Expressで
サーバーBのSQL Serverに接続して、
Security->Loginsで、New Login...として
・Login name:[サーバーA]\ユーザー名(またはグループ名)]
・Windows Authentication(Windows認証)を選択
・Default database:[対象のデータベース]を選択

続いて、Select a pageのUser Mappingを選択し、
・Databaseから[対象のデータベース]のMapにチェック
・Databse role membership for: [対象のデータベース]から
db_owner等(今回は、db_datareaderとdatawriterを選択しました)をチェック

すると、Databases->[対象のデータベース]->Security->Usersに、
自動的に[サーバーA]\ユーザー名(またはグループ名)]が作成されます。

以上で、クライアントPCからWindows認証でSQL Serverに
接続できるようになりました
(クライアントPCにSQL Server Management Studioをインストールして接続確認しました)

本当にありがとうございました。
この設定で不備な点(もう少しこうしたほうがいい)などありましたら是非教えてください。
宜しくお願いいたします。


2009年6月8日月曜日 8:11

こんにちは、フォーラムオペレータの高橋春樹です。

naginoさん、trapemiyaさん、こんにちは!
ご投稿ありがとうございました。

うーたんさん、はじめまして!
MSDNフォーラムのご利用ありがとうございます。

ご報告ありがとうございます。
対処内容を詳しく書いて頂くと皆様の参考となり、大変助かります。

問題が解決したようなので、大丈夫と思いますが、
naginoさん、trapemiyaさんから頂いたアドバイスに
回答マークを付けさせて頂きました。

今後ともMSDNフォーラムをよろしくお願いします。

マイクロソフト株式会社 フォーラム オペレータ 高橋春樹