質問編集履歴

3

試したことの捕捉を記述

2022/03/18 08:34

投稿

kutsulog
kutsulog

スコア985

test CHANGED
File without changes
test CHANGED
@@ -65,3 +65,10 @@
65
65
  GRANT SELECT ON dbo.<製品マスタのビュー> TO <接続先専用ユーザー> AS dbo
66
66
 
67
67
  ```
68
+
69
+ 2022/03/18 補足3
70
+ 試したことへの記載をしておりませんでしたが、
71
+ 同一インスタンス、同一DB環境において接続先専用のViewが参照可能かつ、大元のテーブルが参照不可になる確認はできています。
72
+ 今回実施したいのは同一インスタンス、別DB環境でのView参照になります。
73
+ (参考URLの例で行くとSERVER1のインスタンス内に大元のテーブルを持つSampleDBがあって、そこにアクセスするViewはSampleDB2,SampleDB3のような別のDBに配置したいです)
74
+ 別DBにすると実現できないということであれば、その旨を教えていただけますと幸いです。

2

提示URLに従った結果の記載

2022/03/18 05:46

投稿

kutsulog
kutsulog

スコア985

test CHANGED
File without changes
test CHANGED
@@ -58,3 +58,10 @@
58
58
  SQL Server 2019
59
59
  SQL Management Studio v18.10
60
60
 
61
+ 2022/03/18 補足2
62
+ 提示いただいたURLを参考に以下のクエリを実行しましたが、やはり先の捕捉に記載した通りのエラーとなってしまいます。
63
+ ```SQL
64
+ use <専用DB>
65
+ GRANT SELECT ON dbo.<製品マスタのビュー> TO <接続先専用ユーザー> AS dbo
66
+
67
+ ```

1

作業詳細と発生エラーを記入

2022/03/18 04:33

投稿

kutsulog
kutsulog

スコア985

test CHANGED
File without changes
test CHANGED
@@ -26,3 +26,35 @@
26
26
  解決方法がわかりましたらご教示いただけますと幸いです。
27
27
  やりたいことが実現できればDBを分ける以外の方法でも構いません
28
28
  よろしくお願いします。
29
+
30
+ 2022/03/18 補足
31
+ > 専用DB側にビュー参照のユーザーロールを作ってユーザに付与する
32
+ こちらを行った際の手順ですが、
33
+ 1.ロールを作る
34
+ ・ロール名をつける
35
+ ・同じ種類のオブジェクトすべてを対象としてViewを選択
36
+ ・'Select'の'Grant'にチェックを入れる
37
+ 2.ロールをログインに紐づける
38
+ ・ログインの対象ユーザで作成したロールにチェックを入れる
39
+
40
+ 上記の手順で実施しています。
41
+
42
+ このとき、大元のDBにログインユーザをマップしていないとき以下のエラーとなりました。
43
+ > 現在のセキュリティ コンテキストでは、サーバー プリンシパル "<ログインユーザー名>" はデータベース "<大元データベース名>" にアクセスできません。
44
+
45
+ 大元のDBにログインユーザーをマップすると以下のエラーとなりました。
46
+ > SELECT 権限がオブジェクト '製品マスタ、データベース '<大元データベース名>'、スキーマ 'dbo' で拒否されました。
47
+ (製品マスタはデフォルトスキーマ'dbo'に作成しています)
48
+ (作成したロールの所有者は'dbo'になっています)
49
+
50
+ 大元のDBで製品マスタに対するSELECT権限をつけるとエラーは発生しなくなりますが、直接製品マスタを参照できてしまいます。
51
+
52
+ どこか手順に不足、誤りがあるのでしょうか?
53
+
54
+ またビューに参照権限を与えるとは、ユーザーやロールに参照権限をつけるのではなく、
55
+ ビューに製品マスタへの参照権限をつけるということでしょうか?
56
+ この操作の方法がわからないので方法または参考URLを教えていただけないでしょうか?
57
+ 環境
58
+ SQL Server 2019
59
+ SQL Management Studio v18.10
60
+