トップ回答者
Publicロールの仕様について

質問
回答
-
【追記】
> 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
-
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/
すべての返信
-
「PUBLIC ロールの仕様」と言うより、ログインユーザーへの権限の与え方に関する質問のように見えますが、もしそうであれば以下の記事が参考になりませんか?
ユーザー権限の設定
http://surferonwww.info/BlogEngine/post/2010/09/12/Setting-user-access-right-in-SQL-Server.aspx -
【追記】
> 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
-
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/