簡體   English   中英

在 SQL 服務器登錄時創建臨時表

[英]Creating temp table on logon in SQL Server

是否可以讓 SQL 服務器在用戶連接到數據庫時在特定數據庫中創建一個臨時表,以便連接用戶是唯一可以訪問該表中內容的用戶(或者更好的是,連接用戶是唯一一個甚至可以看到桌子的人)?

我嘗試使用登錄觸發器(包括使用'with execute as caller'子句),但盡管這會創建臨時表,但連接用戶永遠無法看到它/從中選擇。 所有這些都必須在 SQL 服務器內部運行,並且根本不需要用戶交互......

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

  • 用戶連接
    • 在 SQL 內的特定數據庫中創建了一個臨時表(由 SQL,通過建立連接開始)
  • 表格內填充了一些特定信息
  • 在連接期間; 用戶具有(讀取)此表中內容的訪問權限; 此表中的信息由特定數據庫內的子系統使用
  • 用戶斷開連接
    • 臨時表及其所有內容被 SQL 刪除

謝謝

第一個想法:

  • 修改您的客戶端代碼以創建連接表? 然后它只能在需要時完成,而不是一直
  • 使用基於 GUID 的具有 SessionID 的通用持久表? 這也將提供一些審計+故障排除信息
  • 使用表值參數按需發送數據,而不是使用任何服務器端緩存

我可能會做的事情:

  • 當我需要它時創建表格。 用戶可以出於多種原因連接到數據庫(我假設)。 所以“連接”應該與“CREATE TABLE”分離。

如果您的數據訪問被正確設計為打開連接-執行操作/查詢-關閉連接,則為此使用臨時表將不是正確的方法。 關閉連接的那一刻,臨時表將被破壞。 最好使用視圖或存儲過程來過濾用戶應該有權訪問的信息。 該視圖的結構很大程度上取決於用戶如何連接到數據庫。 用戶是使用自己的個人 windows 身份驗證帳戶連接到數據庫,還是像許多 web 服務器那樣通過另一個帳戶間接連接到數據庫?

IMO,更好的方法是 gbn 答案的第二個要點:一個帶有關於 session 或用戶的指示符的常見持久表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM