0

スケジュールされたタスクは、コマンド ライン スクリプトを介してジオコーディングを行うため、Microsoft SQL Server に保存されている一部のデータ (ジオコーディングするアドレス) にアクセスする必要があります。

このデータはスキーマAに属し、複数のテーブルのデータで構成されています。

私は考えました

  • SQL Server ログイン、スキーマ、およびユーザーBの作成
  • A.TABLE_XおよびA.TABLE_Yから選択するビューA.VIEW1の作成
  • A.VIEW1 TO Bに対するSELECT権限の付与

ビューは他のテーブルを参照するため、A.VIEW1からBを選択すると、権限エラーがスローされます。

オブジェクト ' A.TABLE_X '、データベース '...'、スキーマ '...'に対する SELECT 権限が拒否されました。

A.TABLE_XA.TABLE_Y、... TO BでGRANT SELECT に代わるものはありますか? そうすれば、Bはそれらのテーブルからすべてのデータを読み取ることができるからですよね?

BのSQLサーバー資格情報はファイルシステムまたはタスクスケジューラにプレーンテキストで保存されるため、Bにこれを許可したくありません。(代替手段はありますか?)

A.TABLE_XA.TABLE_Yには、銀行口座番号などの顧客関連のデータが含まれています。 GRANT を特定の列に制限することはできますが、それでもこの考えは嫌いです。

別の方法は、ストアドプロシージャ A.PROC_FILLで前に一時テーブルを埋めることですが、EXEC をBに付与するだけでは十分ではありませんか?

4

1 に答える 1

0

execストアド プロシージャのアクセス許可reportprocをユーザーに付与するとreport_user、既定では、ユーザーは作成者のアクセス許可でそのプロシージャを実行し、基になるテーブルへのアクセス許可を必要とせずに結果を表示できます。

その手順はselect、テーブルを埋めるのではなく、単に である可能性があります。

create proc reportproc as
begin
    select * from a.table_x inner join a.table_y on tablex.id = table_y.id
end
go
grant exec on reportproc to reportuser

異なるスキーマからのテーブルのビューでは、状況はもう少し複雑になります。http://msdn.microsoft.com/en-us/library/ms188676.aspxを参照してください。

于 2013-08-06T12:05:13.813 に答える