• ベストアンサー
  • 困ってます

SQL server認証に必要な最低限のロールを教えてください。

こんにちは、いつも参考にさせて頂いております。 SQL Server2008でDBを管理しているのですが、 あるインスタンスへSQL server認証ができません。 sysadmin権限をつけたら認証されたのですが、できるだけ権限は最小にとどめたいです。 そこで質問です。 SQL server認証に必要な最小のサーバー ロールとデータベースのロールは何でしょうか? アドバイスやヒントなど、何かお気づきでしたら教えてください。 どうか、宜しくお願いいたします。 [現在の設定] サーバー ロール:public ユーザーマッピング: 何も設定していません。 設定しようとDBにチェックすると、ユーザーにログインユーザーと同じ名が入り、 既に存在しています、と怒られてしまいます。 ユーザー名に違う名前(例えばdbo)を設定しても同様に怒られました。 なので、ここの設定は何もしないのが正しいのかな?と思っていますが、 根拠はありません・・ [環境] SQL Server2008 Windows Server2008

共感・応援の気持ちを伝えよう!

  • SQL Server
  • 回答数3
  • 閲覧数2371
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

jamshid6さん、ご回答ありがとうございます。 >全くの推測ですが、そのデータベースはリストアしたものでしょうか? その通りです。びっくりして一瞬止まってしまいました。 データベースの中の方のセキュリティを開いて、該当ユーザを一旦削除し、それからやり直してみてください。 なお、接続するだけなら既定のデータベースがmasterになっている限りはPublicのみでOKのはずです。 なるほどです。やはり、Publicだけで接続できないとおかしいですよね。 これから試してみたいのですが、もしお時間が許せばあと3点ほど質問にお付き合いいただけないでしょうか。 (1)上記の接続、というのはレコードの挿入や更新も含まれますでしょうか? (2)ユーザーマッピングの設定は対象DBに対して以下で大丈夫でしょうか? db_datareader,db_datawriter,db_ddladmin,public (3)この原因で何か思い当たることがあれば教えていただけないでしょうか。 長々とすみませんが、どうか宜しくお願いいたします。

その他の回答 (2)

  • 回答No.3
  • 3rd_001
  • ベストアンサー率66% (115/174)

リストアしたということは、もしかして以下の問題でしょうか? http://www.microsoft.com/japan/sqlserver/2005/ssj/tips/03.mspx リストアでログインのマッピングが切れるのはよくあるので注意が必要です。

共感・感謝の気持ちを伝えよう!

質問者からの補足

3rd_001さん、ご回答ありがとうございます。 非常にわかりやすいサイトですね…。 これを早く見つけたかったです。 >リストアでログインのマッピングが切れるのはよくあるので注意が必要です。 よくあることだとは・・・。 でも、自分がやらかしたと思っていたので少しほっとしました。 (やらかしたのに変わりはありませんが) ありがとうございました。

  • 回答No.2

>(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' ⇒結果:作成したユーザーが見事にひっかかりました。 > やはり一旦データベースレベルのユーザは削除し、 >インスタンスレベルで割り当て直すのが一般的かと思います。 そうさせていただきます。 今回もまた助けていただきありがとうございました。

関連するQ&A

  • アクセスからSQL Serverのデーターを更新することができない。

    アクセスのデーターをSQLサーバーへ移行する計画があり、準備のため SQL Developer バージョンで独習中です。SQLサーバーにコピーしたテーブルにアクセスからログインするとテーブルは見られるのですが、データーの変更については「このレコードセットは更新できません」と表示されます。権限の問題ではないかと思われます。 環境と現状の設定: XP Professional SQL Server 2008 Developer Visual Studio 2008  サーバー名: SVR-1 セキュリティー ログイン名: SVR-1\taro サーバーロールのメンバーシップ:sysadmin データーベース名: project ユーザー名: dbo ログイン名: SVR-1\taro 既定のスキーマ: dbo 所有されているスキーマ:なし データーベースのロールメンバーシップ: db_owner 不思議なことに、Visual Studio 2008を使って試作したデーターベースはアクセスから書き換えができます。セキュリティーの設定も何ら変わりがないのですが。 データーベース (project)のユーザー名(dbo)の「所有しているスキーマ」にあるdata_reader, data_writer欄にチェックをいれても結果は同じです。 どこをどのように設定すれば良いのか、ご教示戴きますようお願い致します。

  • リモートPCからSQL Server 2008 に接続できません。ご指導ください。

    環境 SERVER (Dell T-300) SQL-Server 2008 Workgroup Edition Windows認証 Workgroup による共有接続 ファイルサーバーとしては正常に接続できていますが、SQL-Serverのファイルに接続できません。SQL-ServerのデーターフォルダーはドライブDにあり、Administrator はフルコントールの設定です。 データーベース全体のセキュリティーのログインには SERVER\Administratorと表示されています。 個別データーベースのセキュリティーは: ユーザー dbo guest INFORMATION_SCHEMA sys 上記 dbo のプロパティーは ユーザー名  dbo ログイン名  SERVER\Administrator 規定のスキーマ dbo 所有されているスキーマ なし ロールメンバー db_owner にチェック済 上記の設定でAccess 2007からmdb、adpともアクセスを拒否されます。どこをどのように設定すればよいのでしょうか、ご指導のほど宜しくお願い致します。

  • SQL Serverの認証方法について

    Visual Basic6のソフトが入っているPCがあります。 ネットワークを通じて他のPC(サーバー??)にSQL Serverが入っています。 その場合、SQL Serverへの認証は、Windows認証とSQL認証のどちらになるのでしょうか? SQL Server認証の場合は、ユーザ名とパスワードを設定できる個所を Visual Basic 6のある画面に設けておけばいいのでしょうか?

  • SQL Serverの認証方法について

    SQL Serverについて学習中です。 認証方法の違いについてご教示ください。 SQL Serverには「Windows認証」と「SQL Server認証」の二つの認証方法があるところまでは理解したのですが、ネット検索や手元の資料をみても具体的なものが見えてきません。 (1)「Windows認証」でSQL Serverに接続するには: クライアントPCのWindowsアカウント名/パスワードが、SQL ServerがインストールされているPCに登録されているWindowsのユーザー名/パスワードと一致している必要がある。(一致していても、SQL Serverの設定で接続を拒否されていると接続できない) (2)「SQL Server認証」でSQL Serverに接続するには: SQL Serverの「ログイン」(←Windowsのアカウントではない)に登録されているユーザー名/パスワードと一致すれば、クライアントPCのWindowsアカウントのユーザー名/パスワードが何であっても、データベースに接続できる。 認証方法の違いについては、上記このような理解でよいのでしょうか?? しかし実際には「SQL Server認証」を選択すると、SQL Serverのユーザー名/パスワードだけでなく、Windowsアカウント名/パスワードも一致していないと接続できないように思えます。 つまり 「Windows認証」は「Windows認証だけ」で 「SQL Server認証」は「Windows認証 + SQL Server認証」(両方一致しないといけない) なのではないかという気がしています。 VBやVC#等でローカルアプリを作って複数で使用したいのですが、クライアントPCのアカウント名まで管理するのは厄介です。XPパソコンをAdministratorで使用している人がたくさんいて、Windows認証をクリアできないからです。 クライアントPCのアカウント名やパスワードに関係なく、SQL Serverに登録されたユーザー名/パスワードだけで接続するには、どうしたらよいのでしょうか? よくわかっていないので、よくわからない質問になってしまっていると思いますが、よろしくお願いします。 質問の意味がわからないところは補足しますので、ご指摘ください。

  • Windows統合認証とSQL Server認証の違いについて

    SQL Server(MSDE)で例えば既定のインスタンスに 2つのDBを作るとして、それぞれをアプリAが使う DB1とアプリ2が使うDB2とします。 DB1の方はWindows統合認証でデーターを書き込んで DB2の方はSQL Server認証でデーターを書き込む場合 認証方式の違いでお互いのDB上のデーターが破損したり 整合性が取れなくなるということはあるのでしょうか? あるいは認証方式は統一した方が良いのでしょうか? ものすごく初歩的なことかもしれませんが、どなたか ご助言頂ければ嬉しいです。

  • SQL Server 2005 ログオンアカウント変更後、エージェント開始できない

    SQL Serverのログオンアカウントを変更すると、SQL Server Agentが開始できなくなってしまいます。 OS:windows 2003 server DB:SQL Server 2005 (1)サービスから、SQL Serverのログオンアカウントを「ローカルシステムアカウント」からWINDOWSの「ユーザーアカウント」に変更。  「ユーザーアカウント」はAdministratorsグループのユーザー。  このユーザーはSQL ServerのWindows認証に設定済み。 (2)SQL Serverを停止。同時にSQL Server Agentも停止される。 (3)SQL Server開始。正常に開始。 (4)SQL Server Agent開始。数秒したら停止。  イベントログのエラーの内容:  SQLServerAgent could not be started (reason: SQLServerAgent は SysAdmin として SQLServer に接続できる必要がありますが、'(不明)' は SysAdmin ロールのメンバではありません). (5)SQL Server AgentのログオンアカウントをSQL Serverのログオンと同じ「ユーザーアカウント」に変更。 (6)SQL Server Management Studio→セキュリティ→ログイン→「ユーザーアカウント」→プロパティ→サーバーロールより「sysadmin」にチェックをする。 (7)SQL Serverを停止。 (8)SQL Server開始。正常に開始。 (9)SQL Server Agent開始。数秒したら停止。(4)と同様のエラーが発生。 (10)マシン再起動を実行。同様に(4)のエラーが発生。 SQL Serverのログオンアカウントを変更すると、SQL Server Agentにどのユーザーアカウントを設定しても開始できなくなってしまいます。 何か設定に不備があるのでしょうか? 設定の変更箇所、変更方法が知っている方教えてください。

  • SQL ServerへのODBC接続

    Excelの「外部データの取り込み」により、SQLサーバー内のデータベースよりデータを取得しようとしています。 新しいデータソースの登録のステップで、データソースの種類「Microsoft SQL Server」を選択して、次のポップアップウィンドウでサーバー名と認証IDを入力。そうすると接続可能なDBが「使用するデータが含まれているデータベースを選択」のテキストの下のドロップダウンリスト中に現れるのですが、サーバー側で(local)の中に登録されているDBしか現れず、ユーザ側で定義されたインスタンス(と呼んでいいんでしたっけ?)の中のDBのテーブルを読みに行くことができません。 どのようにすれば、ユーザ側で定義されたインスタンスの中のDBのテーブルを読みに行くことができるようになるのか、ご教示いただけると有り難く思います。宜しくお願い致します。

  • ユーザーに与える権限に付いて

    SQL Server2008でDBを管理しているのですが、 エンドユーザーに与える権限に付いて教えて下さい。 ACCESS ADPから接続してデータの登録、更新、削除を行ないます。 現在、ログインでsysadminをチェックしないと上記の作業が出来ません。 データベースユーザー全てのロールをチェックしてもログインで sysadminがチェックしてないと動作しません。 エンドユーザーのログインではsysadminをチェックしない方がいいと 考えるのですが、その場合各データベースのセキュリティはどのように 設定したらいいのでしょうか?

  • SQLサーバーのテーブルの値が更新できません

    お尋ねします。 SQLサーバー2005にDB1というデータベースにdbo_TB1というテーブルがあります。そのテーブルの特定の列の値を更新したいので、AC.mdbというアクセスのファイルにテーブルのリンクをし、更新したいファイルを用意して、アクセスのクエリでデータを更新しようとしましたところ、更新ができませんでした。  dbo_TB1を更新可能にするためには、どのようにして権限を与えればいいでしょうか。  SQLサーバー2005の知識を習得しようと学習を始めたばかりで、よく理解できていません。よろしくお願いします。

  • Microsoft SQL Serverの変更

    CmdExecの権限をSysadminに制限するために Microsoft SQL Serverの中を変更したいのですが Microsoftの説明書で [スタート]-[すべてのプログラム]-[Microsoft SQL Server]-[Enterprise Manager]を開くとあるのですが すべてのプログラムの中に Microsoft SQL Serverがありません。 どうしたらよいのでしょうか?