Sql-Server
在同一數據庫中選擇跨多個模式的權限
客戶要求我實現一些視圖以用於報告目的,這些視圖將通過 PowerBI、Excel 和 SSRS 訪問。指定的使用者將只能訪問視圖,並且該使用者不能使用任何基礎表。
我遇到的問題是視圖中的 SQL 涉及 3 個不同的模式(都在同一個數據庫中):
- 瞳孔
- 提供者
- 安全
觀點是:
CREATE VIEW dbo.vTestPermissions AS SELECT a.Column1, b.Column1, c.Column1 FROM Pupil.Table1 a JOIN Provider.Table2 b ON a.Column1 = b.Column1 JOIN Security.Table3 c ON a.Column1 = c.Column1
表/視圖的所有者如下:
- Pupil.Table1 - 所有者瞳孔
- Provider.Table2 - 所有者提供者
- Security.Table3 - 所有者安全
- vTestPermissions - 所有者 dbo
當我從視圖中選擇時,出現錯誤:
對象“table3”、數據庫“TEST”、模式“安全”的 SELECT 權限被拒絕
我嘗試在
SELECT
有和沒有GRANT
選項的情況下授予模式和表的權限,但這使得使用者可以使用基礎表。對此的任何幫助將不勝感激。
如果視圖和表都具有相同的所有者,則授予對視圖的選擇權限就足夠了。這稱為所有權連結:
當通過鏈訪問對象時,SQL Server 首先將對象的所有者與呼叫對象的所有者進行比較。這是鏈條中的前一個環節。如果兩個對象具有相同的所有者,則不會評估對所引用對象的權限。
在對象具有不同所有者的情況下,所有權連結不起作用。
因此,最簡單的答案是更改表的所有權以匹配視圖:
ALTER AUTHORIZATION ON Pupil.Table1 TO dbo; ALTER AUTHORIZATION ON Provider.Table2 TO dbo; ALTER AUTHORIZATION ON Security.Table3 TO dbo;
授予對視圖的選擇:
GRANT SELECT ON dbo.vTestPermissions TO USER = 'your_user';
…然後將允許通過視圖訪問,通過所有權連結,同時防止直接表訪問。
如果這不適合您的需求,我們將需要考慮更複雜的安排。