2013-08-06 77 views
0

計劃任務通過命令行腳本進行地理編碼,因此需要訪問存儲在Microsoft SQL Server中的一些數據(地址到地址解析)。正確安全地從SQL Server中選擇數據子集

此數據屬於模式A並且由來自多個表格的數據組成。

我考慮

  • 創建SQL服務器登錄,模式和用戶
  • 創建視圖A.VIEW1選擇從A.TABLE_XA.TABLE_Y
  • 授予選擇權限A.VIEW1 TO

由於視圖的引用其他表,從A.VIEW1選擇拋出一個權限錯誤:

​​

是否有任何替代GRANT SELECT上甲.TABLE_XA.TABLE_Y,... TO B? 因爲如果我這樣做,B可以讀取所有數據從這些表中,不是嗎?

我不想才能夠做到這一點,因爲對於在SQL Server證書將被存儲在明文上的文件系統或在任務調度。 (什麼替代?)

A.TABLE_XA.TABLE_Y包含客戶相關的數據,如銀行賬戶號碼等 我可能會限制授予特定的列,但我還是不喜歡這個主意。

另一種方法是用一個存儲過程A.PROC_FILL之前填寫一個臨時表,但授予EXEC到也將是不夠的,不是嗎?

回答

0

如果您授予存儲過程reportproc用戶report_userexec的許可,則默認情況下,用戶將能夠運行與創建者的權限程序並查看結果,而無需權限基礎表。

該過程可能只是一個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

+0

這對我不起作用。 ** A **可以從_a.TABLE_X_中選擇。而** A **可以執行_reportproc_。但** B **(reportuser)在授予後無法執行。 – Mike

+0

我需要補充的是,還有另一個底層表** C.TABLE_Z **,** A **可以從中選擇。 – Mike

+0

@Mike當你嘗試用戶B時,它說什麼? – podiluska