2011-05-25 124 views
0

是否有可能有SQL服務器在連接到數據庫,以這樣的方式,用戶創建一個臨時表中的特定數據庫中的連接用戶可以訪問的內容只有一個在此表中(甚至更好,連接用戶的是,甚至可以看到表中的唯一一個)?創建臨時表

我嘗試使用登錄觸發器(包括使用「與執行呼叫者」子句),但是儘管這創建了臨時表,連接用戶永遠不能看到它/從中選擇。 所有這一切都必須在SQL Server內部運行,並要求根本沒有用戶交互...

基本上,這是我想支持的場景:

  • 用戶連接
    • 一個臨時表一個特定的DB內創建SQL內部(由SQL,踢掉,通過建立連接的)
  • 一些特定信息被填充在表內
  • 對於連接的持續時間;用戶具有(讀取)訪問此表中的內容;此表中的信息用於子系統中的特定數據庫中
  • 用戶斷開
    • 臨時表及其所有內容由SQL

感謝

+2

這聽起來效率極低。您最終會用無數的臨時表格來污染您的目錄,您還需要在登錄時填寫這些臨時表格。 (更不用說,您的數據在登錄時可能會過時。) – 2011-05-25 16:47:44

+0

這是一個在數據庫中強制執行行級安全的安全子系統。我希望數據庫執行此操作,以便無論您使用哪個客戶端連接到數據庫,數據庫本身都將始終強制執行行級安全性。 – 2011-05-25 18:32:22

回答

1

下降第一個想法:

  • 修改你的客戶端代碼,在c上創建表onnection?然後,它需要的不是所有的時間
  • 使用基於一個GUID一個共同的,固執地維持着的SessionID表時只能做?這將提供一些審計+故障排除信息太
  • 使用table value parameters發送點播數據,而不是有任何服務器端緩存

什麼我可能會做的事:

  • 創建表當我需要時它被填充。用戶可以連接到數據庫的各種原因(我認爲)。所以「連接」應該從「CREATE TABLE」中解耦。
+0

感謝gbn的回答。 關於你的建議:我明確地想避免在客戶端做這件事,因爲我不希望用戶有能力繞過這段邏輯。 (即想象一個用戶可以直接使用SSMS連接;我希望發生同樣的邏輯) 擁有一個持久表格會使該表格中的所有信息對所有用戶都可見,這是我明確要避免的。 我們也處於多用戶場景,每個用戶都應該有'自己的桌子'。 – 2011-05-25 16:57:32

+1

@T_D - *使該表中的所有信息對所有用戶可見*。取決於您的安全結構,這不是真的。用戶如何連接到數據庫?直接使用他們的AD帳戶(或通過模擬)?通過代理帳戶? – Thomas 2011-05-25 17:01:56

0

如果您的數據訪問被正確設計爲打開連接 - 執行操作/查詢 - 關閉連接,則使用臨時表不會是正確的方法。當你關閉連接時,臨時表將被銷燬。這將是更好地使用視圖或存儲過程來過濾該用戶有權訪問的信息。這種觀點的結構將在用戶連接到數據庫很大程度上依賴。請用戶連接到使用自己的個人Windows身份驗證帳戶數據庫或做他們間接地連接至另一個帳戶像許多Web服務器呢?

海事組織,更好的辦法是,GBN的回答的第二個項目符號點:一個共同的堅持表的指標作爲對會話或用戶。