2016-11-09 106 views
0

我有一個簡單的SQL Server數據庫,並希望通過實體框架與C#應用程序連接。來自EF的遷移對我來說工作得很好。SQL數據庫上的不同用戶只能看到他們自己的數據集(C#,EF)

應用程序的用戶使用其Windows身份驗證連接到數據庫。

有一張表ID | DATA | USERNAME列。

如何防止用戶看到來自其他用戶的數據?

當然,我可以過濾應用程序本身的數據,只向用戶提供允許的數據。

但是,該應用程序的代碼是開源的(在源代碼管理中公開),以便每個人都可以看到連接 - 並手動連接到SQL Server讀取所有數據。

所以,我的問題是什麼是最好的做法隱藏SQL Server中的其他數據,但仍然允許像遷移EF的全部功能?

非常感謝 - 康拉德

+0

你可以發表一些代碼嗎?你想要隱藏和/或限制什麼? –

+0

什麼樣的「應用程序」?一個Web服務?桌面應用程序?安裝桌面應用程序的典型方法是將其安裝到每個用戶,並將應用程序數據存儲在'Environment.SpecialFolder.ApplicationData'中,以便每個用戶獲得一個單獨的數據庫。 –

回答

1

而不是直接查詢表,創建由所述用戶的用戶名濾波器的對象。

WHERE Username = @Username 

在函數或存儲過程中使用此函數,將使用應用程序的用戶的用戶名作爲輸入參數傳遞。

2

您可以在數據庫上添加行級安全性。通過這種方式,只有創建行的用戶才能看到它們。

這樣您就可以將登錄分配給映射到數據庫中的用戶的每個用戶。數據庫將只返回屬於該用戶的行。

這不需要任何特定的編碼,它都是實現服務器端。

SQL 2016在病房雖然。實施起來會很酷。

https://msdn.microsoft.com/en-us/library/dn765131.aspx

+0

雖然存在一些安全問題:'通過使用精心設計的查詢有可能導致信息泄露。例如,SELECT 1 /(SALARY-100000)FROM PAYROLL WHERE NAME ='John Doe'會讓惡意用戶知道John Doe的薪水是$ 100,000。即使存在一個安全謂詞來防止惡意用戶直接查詢其他人的工資,用戶也可以確定查詢何時返回除零異常。 –

相關問題