2017-01-31 3 views
0

私は2つのデータベースを持っています。 1つはデータと1つはストアドプロシージャです。ユーザーはストアドプロシージャを介してのみ直接データを読み取るべきではありません。 フラグ "データベース間の所有権の連鎖"は、サーバーとすべてのデータベースで有効になっています。MS SQL 2014のデータベース間アクセスが期待通りに機能しない

SAとして、私はやっている:

use data_db 
create table dbo.t(....) 
insert into t values(....) 


use sp_db 

create procedure dbo.readt as 
    select * from data_db.dbo.t 

grant execute on dbo.readt to user1 

は今、私は

execute sp_db.dbo.readt 

USER1として再接続して、私はエラーを取得しています:私は間違って

The server principal "user1" is not able to access the database "data_db" under the current security context.

何をしているのですか?

答えて

0

問題は解決しました。

私の最初の願いは、彼らが直接data_dbから任意のデータを読み取ることが許可されていないため、通常のユーザーは、すべての「使用data_db」を実行することはできなかったことでした。 明らかにサーバーはそのようには動作しません...奇妙ですが大丈夫です。 SAとして

use data_db 
grant connect to user1 

ユーザーは '使用data_db' コマンドを行うことができるではありませんが、何も。 CDOCが最終的に動作します!

1

あなたはexecute asが必要です

create procedure dbo.readt 
    with execute as owner 
as 
begin 
    select * from data_db.dbo.t; 
end; 

ストアドプロシージャは、その後誰でもそれを作成したのではなく、それを呼び出したユーザの権限を持っています。

0

ユーザーがログインしようとしているデータベースにマップされているかどうかを確認する必要があります。

関連する問題