Sql-Server
SQL Server 登錄以從單個數據庫訪問三個不同數據庫的表
我在 SQL Server 2008 R2 中創建了一個登錄名,並且只允許訪問在該數據庫中執行儲存過程。但是這個儲存過程實際上是從其他兩個數據庫訪問數據,這個使用者沒有訪問權限,我無法訪問這些數據庫。
如何創建具有單一數據庫訪問權限的使用者,但只能通過此儲存過程對其他兩個數據庫執行查詢?
到目前為止我做了什麼:
- 創建登錄並映射到
Database1
- 右鍵點擊其中的儲存過程
Database1
並授予該使用者執行該儲存過程的權限- 此儲存過程正在執行查詢以從其他兩個數據庫 (
Database2
和Database3
)獲取數據例如
Select value1, value2, value3 from Database1.[dbo].table1 inner join Database2.[dbo].table2 on .... inner join Database3.[dbo].table3 on ....
跨數據庫所有權連結是更簡單的解決方案。但正如 Oliver 所指出的,它確實存在一些安全隱患。
如果您想避免跨數據庫所有權連結方法,可以引用 Erland Sommarskog 的話:“當您需要編寫訪問另一個數據庫中數據的儲存過程時,您可以通過使用存在於兩個數據庫。”
Erland 有一篇關於這個主題的長篇文章。我給你連結到使用證書的跨數據庫權限的具體問題:http: //www.sommarskog.se/grantperm.html#certcrossdb
這更安全,但工作量更大。