none
Publicロールの仕様について RRS feed

  • 質問

  • SQLServerのPUBLIC ロールの仕様ですが、MSDNのサイトには「PUBLIC ロールには、専用管理者接続以外のすべてのエンドポイントに対する CONNECT 権限が付与されます」と記載があります。

    これは、と全オブジェクト(テーブルやビューなど)に対して接続権限は保持しているとの認識でよろしいでしょうか。

    また参照、更新、削除、追加の権限は別途付与する必要があるのでしょうか。

    誰かわかる方がいらっしゃいましたらお願いいたします

    2015年6月4日 7:32

回答

  • 【追記】

    > public権限でできることの一覧が記載されているURL

    ググって探してみましたが SQL Server 2014(質問者さんの別スレッドの情報)で「一覧」というのは見つかりませんでした。SQL Server 2008 R2 の記事ですが、以下の解説に書いてある通りだと思います。

    固定サーバー ロールの権限 (データベース エンジン)
    https://technet.microsoft.com/ja-jp/library/ms175892(v=sql.105).aspx

    質問者さんの環境で SQL Server Management Studio が使えるとのことなので、ご自分の目で public のプロパティを見て確認してください。


    • 編集済み SurferOnWww 2015年6月5日 3:15 一部追加
    • 回答の候補に設定 星 睦美 2015年6月8日 2:38
    • 回答としてマーク 星 睦美 2015年6月10日 7:22
    2015年6月5日 3:11
  • SQLServerのPUBLIC ロールの仕様ですが、MSDNのサイトには「PUBLIC ロールには、専用管理者接続以外のすべてのエンドポイントに対する CONNECT 権限が付与されます」と記載があります。

    これは、と全オブジェクト(テーブルやビューなど)に対して接続権限は保持しているとの認識でよろしいでしょうか。

    また参照、更新、削除、追加の権限は別途付与する必要があるのでしょうか。

    おそらく混乱されています。まず、単にpublicロールと言っても2種類あります。サーバーロールのpublicとデーターベースロールのpublicです。
    SQL Serverの基本ですが、ログインユーザーとデーターベースユーザーの2種類のユーザーが存在します。ログインユーザーで認証してSQL Serverに接続し、その後、各データーベースへはデーターベースユーザーで接続することになります。「その後」と書きましたが、このログインユーザーとデーターベースユーザーを対応付けるのがユーザーマッピングです。このユーザーマッピングよって、例えばSQL ServerへUserAというログインユーザーでログイン後、UserBというデーターベースユーザーで目的のデーターベースにアクセスすることになります。よって、実際にデーターベースにアクセスして、参照、更新、削除、追加(以後、CRUDと表記)できるかどうかは、UserBというデーターベースユーザーの権限によります。
    ここではログインユーザーをUserA、データーベースユーザーをUserBとしましたが、どちらのユーザーも同じUserAということも多いですので、ここが混乱してわかりにくいところなんだろうと思います。


    元のご質問に戻ります。

    >SQLServerのPUBLIC ロールの仕様ですが、MSDNのサイトには「PUBLIC ロールには、専用管理者接続以外のすべてのエンドポイントに対する CONNECT 権限が付与されます」と記載があります。

    と書かれているのは、サーバーロールのPublicロールのことであり、SQL Server自体に対して何ができるかの権限です。データベースに対してCRUDするだけのユーザーはSQL Server自体に対しては何もしないのが普通です。よって、サーバーロールのPublicロールのみで一般的には十分です。


    >これは、と全オブジェクト(テーブルやビューなど)に対して接続権限は保持しているとの認識でよろしいでしょうか。

    >また参照、更新、削除、追加の権限は別途付与する必要があるのでしょうか。

    これについては、データーベースロールのPublicロールです。全てのユーザーはこのpublicロールに属します。しかし、publicロールには何の権限もありません。つまり、何もできないのです。よって、何らかの方法で権限を与えることになります。データーベース全体に与えても良いですし、特定のテーブルのみCRUDできるように権限を与えても良いでしょう。その辺りは自由です。
    よく行うのは、データーベースロールのdb_datareader、db_datawriterに属させることです。こうするとそのデーターベース内の全てのテーブルに対してCRUDできるようになります。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    • 編集済み trapemiya 2015年6月5日 5:15 勘違いかもしれないところを一旦削除
    • 回答の候補に設定 星 睦美 2015年6月8日 2:37
    • 回答としてマーク 星 睦美 2015年6月10日 7:22
    2015年6月5日 5:01

すべての返信

  • 「PUBLIC ロールの仕様」と言うより、ログインユーザーへの権限の与え方に関する質問のように見えますが、もしそうであれば以下の記事が参考になりませんか?

    ユーザー権限の設定
    http://surferonwww.info/BlogEngine/post/2010/09/12/Setting-user-access-right-in-SQL-Server.aspx

    2015年6月4日 8:05
  • ご回答ありがとうございます。教えていただいたURLを確認しましたが

    「一般ユーザー用の DB の更新、削除、実行、接続、選択、挿入をするだけのアカウントに対しては public のみの権限で不足はないようです。」

    とありましたので、おそらくpublicにはDB の更新、削除、実行、接続、選択、挿入など一通りの権限があるのですね

    追加で申し訳ないのですが、public権限でできることの一覧が記載されているURLなど知っていらっしゃいましたら

    ご教示いただけますか

    2015年6月4日 10:14
  • > publicにはDB の更新、削除、実行、接続、選択、挿入など一通りの権限があるのですね

    いえ、ないです。よく読んでいただければ、もしくは実際に試してみれば分かると思います。

    2015年6月4日 11:06
  • 【追記】

    > public権限でできることの一覧が記載されているURL

    ググって探してみましたが SQL Server 2014(質問者さんの別スレッドの情報)で「一覧」というのは見つかりませんでした。SQL Server 2008 R2 の記事ですが、以下の解説に書いてある通りだと思います。

    固定サーバー ロールの権限 (データベース エンジン)
    https://technet.microsoft.com/ja-jp/library/ms175892(v=sql.105).aspx

    質問者さんの環境で SQL Server Management Studio が使えるとのことなので、ご自分の目で public のプロパティを見て確認してください。


    • 編集済み SurferOnWww 2015年6月5日 3:15 一部追加
    • 回答の候補に設定 星 睦美 2015年6月8日 2:38
    • 回答としてマーク 星 睦美 2015年6月10日 7:22
    2015年6月5日 3:11
  • SQLServerのPUBLIC ロールの仕様ですが、MSDNのサイトには「PUBLIC ロールには、専用管理者接続以外のすべてのエンドポイントに対する CONNECT 権限が付与されます」と記載があります。

    これは、と全オブジェクト(テーブルやビューなど)に対して接続権限は保持しているとの認識でよろしいでしょうか。

    また参照、更新、削除、追加の権限は別途付与する必要があるのでしょうか。

    おそらく混乱されています。まず、単にpublicロールと言っても2種類あります。サーバーロールのpublicとデーターベースロールのpublicです。
    SQL Serverの基本ですが、ログインユーザーとデーターベースユーザーの2種類のユーザーが存在します。ログインユーザーで認証してSQL Serverに接続し、その後、各データーベースへはデーターベースユーザーで接続することになります。「その後」と書きましたが、このログインユーザーとデーターベースユーザーを対応付けるのがユーザーマッピングです。このユーザーマッピングよって、例えばSQL ServerへUserAというログインユーザーでログイン後、UserBというデーターベースユーザーで目的のデーターベースにアクセスすることになります。よって、実際にデーターベースにアクセスして、参照、更新、削除、追加(以後、CRUDと表記)できるかどうかは、UserBというデーターベースユーザーの権限によります。
    ここではログインユーザーをUserA、データーベースユーザーをUserBとしましたが、どちらのユーザーも同じUserAということも多いですので、ここが混乱してわかりにくいところなんだろうと思います。


    元のご質問に戻ります。

    >SQLServerのPUBLIC ロールの仕様ですが、MSDNのサイトには「PUBLIC ロールには、専用管理者接続以外のすべてのエンドポイントに対する CONNECT 権限が付与されます」と記載があります。

    と書かれているのは、サーバーロールのPublicロールのことであり、SQL Server自体に対して何ができるかの権限です。データベースに対してCRUDするだけのユーザーはSQL Server自体に対しては何もしないのが普通です。よって、サーバーロールのPublicロールのみで一般的には十分です。


    >これは、と全オブジェクト(テーブルやビューなど)に対して接続権限は保持しているとの認識でよろしいでしょうか。

    >また参照、更新、削除、追加の権限は別途付与する必要があるのでしょうか。

    これについては、データーベースロールのPublicロールです。全てのユーザーはこのpublicロールに属します。しかし、publicロールには何の権限もありません。つまり、何もできないのです。よって、何らかの方法で権限を与えることになります。データーベース全体に与えても良いですし、特定のテーブルのみCRUDできるように権限を与えても良いでしょう。その辺りは自由です。
    よく行うのは、データーベースロールのdb_datareader、db_datawriterに属させることです。こうするとそのデーターベース内の全てのテーブルに対してCRUDできるようになります。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    • 編集済み trapemiya 2015年6月5日 5:15 勘違いかもしれないところを一旦削除
    • 回答の候補に設定 星 睦美 2015年6月8日 2:37
    • 回答としてマーク 星 睦美 2015年6月10日 7:22
    2015年6月5日 5:01
  • わかりやすい回答ありがとうございました

    2015年6月8日 9:54