プロが教えるわが家の防犯対策術!

こんにちは、いつも参考にさせて頂いております。

SQL Server2008でDBを管理しているのですが、
あるインスタンスへSQL server認証ができません。

sysadmin権限をつけたら認証されたのですが、できるだけ権限は最小にとどめたいです。

そこで質問です。
SQL server認証に必要な最小のサーバー ロールとデータベースのロールは何でしょうか?
アドバイスやヒントなど、何かお気づきでしたら教えてください。
どうか、宜しくお願いいたします。

[現在の設定]
サーバー ロール:public

ユーザーマッピング:
何も設定していません。
設定しようとDBにチェックすると、ユーザーにログインユーザーと同じ名が入り、
既に存在しています、と怒られてしまいます。
ユーザー名に違う名前(例えばdbo)を設定しても同様に怒られました。
なので、ここの設定は何もしないのが正しいのかな?と思っていますが、
根拠はありません・・

[環境]
SQL Server2008
Windows Server2008

A 回答 (3件)

全くの推測ですが、そのデータベースはリストアしたものでしょうか?



データベースの中の方のセキュリティを開いて、該当ユーザを一旦削除し、それからやり直してみてください。
なお、接続するだけなら既定のデータベースがmasterになっている限りはPublicのみでOKのはずです。

この回答への補足

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

>全くの推測ですが、そのデータベースはリストアしたものでしょうか?
その通りです。びっくりして一瞬止まってしまいました。

データベースの中の方のセキュリティを開いて、該当ユーザを一旦削除し、それからやり直してみてください。
なお、接続するだけなら既定のデータベースがmasterになっている限りはPublicのみでOKのはずです。
なるほどです。やはり、Publicだけで接続できないとおかしいですよね。

これから試してみたいのですが、もしお時間が許せばあと3点ほど質問にお付き合いいただけないでしょうか。
(1)上記の接続、というのはレコードの挿入や更新も含まれますでしょうか?
(2)ユーザーマッピングの設定は対象DBに対して以下で大丈夫でしょうか?
db_datareader,db_datawriter,db_ddladmin,public
(3)この原因で何か思い当たることがあれば教えていただけないでしょうか。

長々とすみませんが、どうか宜しくお願いいたします。

補足日時:2009/09/03 18:18
    • good
    • 0

>(1)上記の接続、というのはレコードの挿入や更新も含まれますでしょうか?


接続には更新のみならず参照も含まれません。

>(2)ユーザーマッピングの設定は対象DBに対して以下で大丈夫でしょうか?
>db_datareader,db_datawriter,db_ddladmin,public
ロールについてはDDL権限も与えるならば、その4つのロールで足りるでしょう。

>(3)この原因で何か思い当たることがあれば教えていただけないでしょうか。
他の環境からリストアしたデータベースの場合、元の環境のユーザは内部管理レベルでは今の環境のユーザとは同じものとみなされないため、
「インスタンスレベルでは割り当てられないように見えるがデータベースレベルでは存在する」という事象がおこります。
でもユーザ名は同じなので、割当てようとすると「既に存在します」とエラーになります。
やはり一旦データベースレベルのユーザは削除し、インスタンスレベルで割り当て直すのが一般的かと思います。

この回答への補足

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

>(1)上記の接続、というのはレコードの挿入や更新も含まれますでしょうか?
>接続には更新のみならず参照も含まれません。
>(2)ユーザーマッピングの設定は対象DBに対して以下で大丈夫でしょうか?
>db_datareader,db_datawriter,db_ddladmin,public
>ロールについてはDDL権限も与えるならば、
>その4つのロールで足りるでしょう。
不安を解消していただきありがとうございます。DDL権限も欲しいので
サーバーにpublic+DBに上記4ロールでいこうと思います。

>(3)この原因で何か思い当たることがあれば教えていただけないでしょうか。
> 他の環境からリストアしたデータベースの場合、
>元の環境のユーザは内部管理レベルでは今の環境のユーザとは
>同じものとみなされないため、
> 「インスタンスレベルでは割り当てられないように見えるが
>データベースレベルでは存在する」という事象がおこります。
> でもユーザ名は同じなので、割当てようとすると
>「既に存在します」とエラーになります。

そういうことがあるのですね、勉強になります。

また、情報を頼りにサポート情報をみつけたので、早速確認してみたら…
「対応するログインの存在しないユーザー」
http://support.microsoft.com/kb/274188/

USE データベース名
EXEC sp_change_users_login 'Report'
⇒結果:作成したユーザーが見事にひっかかりました。

> やはり一旦データベースレベルのユーザは削除し、
>インスタンスレベルで割り当て直すのが一般的かと思います。
そうさせていただきます。
今回もまた助けていただきありがとうございました。

補足日時:2009/09/03 19:57
    • good
    • 0

リストアしたということは、もしかして以下の問題でしょうか?



http://www.microsoft.com/japan/sqlserver/2005/ss …

リストアでログインのマッピングが切れるのはよくあるので注意が必要です。

この回答への補足

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

非常にわかりやすいサイトですね…。
これを早く見つけたかったです。

>リストアでログインのマッピングが切れるのはよくあるので注意が必要です。
よくあることだとは・・・。
でも、自分がやらかしたと思っていたので少しほっとしました。
(やらかしたのに変わりはありませんが)
ありがとうございました。

補足日時:2009/09/03 19:59
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!