回答編集履歴
3
追記2
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
追記
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
訂正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
SSMS を操作して「ログインユーザー太郎」に当該ストアドプロシージャに
|
5
|
+
SSMS を操作して「ログインユーザー太郎」に当該ストアドプロシージャに対する「実行」権限を与えたらどうなりますか?
|
6
6
|
|
7
7
|
|
8
8
|
|