回答編集履歴

3

追記2

2021/10/08 00:26

投稿

退会済みユーザー
test CHANGED
@@ -71,3 +71,33 @@
71
71
 
72
72
 
73
73
  お試しください。
74
+
75
+
76
+
77
+ **【追記2】**
78
+
79
+
80
+
81
+ 下のコメント欄の 2021/10/08 06:54 の私のコメントで「文書見つかりました。後で解答欄に書いておきます」と書いた件です。
82
+
83
+
84
+
85
+ どうして EXECUTE を使うと対象テーブルにSELECT権限を与える必要があるのかですが、そういう仕様だということのようです。以下の記事を見てください。
86
+
87
+
88
+
89
+ アクセス許可
90
+
91
+ [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)
92
+
93
+
94
+
95
+ 抜粋: "EXECUTE ステートメントの実行に権限は必要ありませんが、 EXECUTE 文字列内で参照されるセキュリティ保護可能なリソースに対しては権限が必要です。 たとえば、この文字列に INSERT ステートメントが含まれている場合、EXECUTE ステートメントの呼び出し元は対象のテーブルに対する INSERT 権限が必要です。"
96
+
97
+
98
+
99
+ 仕様ということらしいので、ストアドに EXECUTE を使う今回の質問の例の場合、ユーザーには対象テーブルに対する SELECT 権限も与える以外に解決策はなさそうです。
100
+
101
+
102
+
103
+ (上の「EXECUTE ステートメントの実行に権限は必要ありませんが」というのはストアドの「実行」権限の話ではありませんので注意してください。ストアドの「実行」権限はストアド内に EXECUTE ステートメントを使う/使わないにかかわらず、ユーザーに与える必要があります)

2

追記

2021/10/08 00:26

投稿

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

1

訂正

2021/10/06 04:19

投稿

退会済みユーザー
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- SSMS を操作して「ログインユーザー太郎」に当該ストアドプロシージャにたいする「実行」権限を与えたらどうなりますか?
5
+ SSMS を操作して「ログインユーザー太郎」に当該ストアドプロシージャにする「実行」権限を与えたらどうなりますか?
6
6
 
7
7
 
8
8