teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記2

2021/10/08 00:26

投稿

退会済みユーザー
answer CHANGED
@@ -34,4 +34,19 @@
34
34
 
35
35
  ![イメージ説明](b9fc86b6ca17e3adc3ad7d4ce76143ad.jpeg)
36
36
 
37
- お試しください。
37
+ お試しください。
38
+
39
+ **【追記2】**
40
+
41
+ 下のコメント欄の 2021/10/08 06:54 の私のコメントで「文書見つかりました。後で解答欄に書いておきます」と書いた件です。
42
+
43
+ どうして EXECUTE を使うと対象テーブルにSELECT権限を与える必要があるのかですが、そういう仕様だということのようです。以下の記事を見てください。
44
+
45
+ アクセス許可
46
+ [https://docs.microsoft.com/ja-jp/sql/t-sql/language-elements/execute-transact-sql?view=sql-server-ver15#permissions](https://docs.microsoft.com/ja-jp/sql/t-sql/language-elements/execute-transact-sql?view=sql-server-ver15#permissions)
47
+
48
+ 抜粋: "EXECUTE ステートメントの実行に権限は必要ありませんが、 EXECUTE 文字列内で参照されるセキュリティ保護可能なリソースに対しては権限が必要です。 たとえば、この文字列に INSERT ステートメントが含まれている場合、EXECUTE ステートメントの呼び出し元は対象のテーブルに対する INSERT 権限が必要です。"
49
+
50
+ 仕様ということらしいので、ストアドに EXECUTE を使う今回の質問の例の場合、ユーザーには対象テーブルに対する SELECT 権限も与える以外に解決策はなさそうです。
51
+
52
+ (上の「EXECUTE ステートメントの実行に権限は必要ありませんが」というのはストアドの「実行」権限の話ではありませんので注意してください。ストアドの「実行」権限はストアド内に EXECUTE ステートメントを使う/使わないにかかわらず、ユーザーに与える必要があります)

2

追記

2021/10/08 00:26

投稿

退会済みユーザー
answer CHANGED
@@ -4,4 +4,34 @@
4
4
 
5
5
  ![イメージ説明](bc130213e1cf9c11429657d550b35aea.jpeg)
6
6
 
7
- ハズレだったらすみません。
7
+ ハズレだったらすみません。
8
+
9
+ **【追記】**
10
+
11
+ 下のコメント欄の 2021/10/06 12:58 の私のコメントで「自分の環境でやってみましたが、ストアドの実行権限を与えるだけではダメで、当該テーブルの SELECT 権限も必要という結果でした。詳しくは後で回答欄に追記しておきます」と書いた件です。
12
+
13
+ Windows 10 Pro 64-bit にインストールした SQL Server 2012 の以下の画像の Student テーブルで試してみました。
14
+
15
+ ![イメージ説明](540d55e91007de076af12c67577340e5.jpeg)
16
+
17
+ 権限を与えるのは IIS のワーカープロセスのアカウントにした NETWORK SERVICE にしましたので、Student テーブルのあるデータベース TestDatabase のログインに NETWORK SERVICE を追加。
18
+
19
+ ![イメージ説明](7efd76ca4690905ee74ab903373c9aa2.jpeg)
20
+
21
+ ストアドプロシージャを作成。
22
+
23
+ ![イメージ説明](b5aa52936741cfa92902d38a0cef3c48.jpeg)
24
+
25
+ NETWORK SERVICE にストアドプロシージャの実行権限を付与。これだけでは「SELECT 権限がオブジェクト・・・」というエラーになります。
26
+
27
+ ![イメージ説明](7b7a18bffe880366107fce9f82916a05.jpeg)
28
+
29
+ エラーメッセージは SELECT 権限がないと言っているので、NETWORK SERVICE に Student テーブルに対する SELECT 権限を与えます。
30
+
31
+ ![イメージ説明](9d848104496eebbe31dab2a6a32f08d7.jpeg)
32
+
33
+ 以上でエラーは解消します。実行結果は以下の通りです。
34
+
35
+ ![イメージ説明](b9fc86b6ca17e3adc3ad7d4ce76143ad.jpeg)
36
+
37
+ お試しください。

1

訂正

2021/10/06 04:19

投稿

退会済みユーザー
answer CHANGED
@@ -1,6 +1,6 @@
1
1
  検証したわけではないのでハズレかもしれませんが・・・
2
2
 
3
- SSMS を操作して「ログインユーザー太郎」に当該ストアドプロシージャにたいする「実行」権限を与えたらどうなりますか?
3
+ SSMS を操作して「ログインユーザー太郎」に当該ストアドプロシージャにする「実行」権限を与えたらどうなりますか?
4
4
 
5
5
  ![イメージ説明](bc130213e1cf9c11429657d550b35aea.jpeg)
6
6