2013-10-14 16 views
0

我在Microsoft SQL Server 2008中有許多記錄的表。某些記錄具有布爾標誌集。其他人沒有。如何使用t-sql權限向某人顯示錶中的記錄子集?

我想讓用戶只能看到標誌設置的記錄。我提出了一個使用select語句查詢這些記錄的視圖,並且讓用戶讀取了此視圖的權限。但是因爲視圖從原始表中選擇SQL服務器說用戶沒有足夠的權限來查看視圖。

視圖和表位於同一個數據庫中。

如何設置權限(使用視圖或使用其他方法),以便用戶只能看到該表中的記錄子集?

+0

視圖的所有者是誰?誰是底層表的所有者?他們在同一個數據庫中嗎? – podiluska

回答

4

這工作正是因爲它應該:

USE tempdb; 
GO 
CREATE TABLE dbo.MyFlags(a INT, flag BIT); 
GO 
INSERT dbo.MyFlags VALUES(1,0),(2,1),(3,1); 
GO 
CREATE VIEW dbo.vMyFlags 
AS 
    SELECT a, flag FROM dbo.MyFlags WHERE flag = 1; 
GO 
CREATE LOGIN smudge WITH PASSWORD = 'floob', CHECK_POLICY = OFF; 
GO 
CREATE USER smudge FROM LOGIN smudge; 
GO 
GRANT SELECT ON dbo.vMyFlags TO smudge; 
GO 
EXECUTE AS user = 'smudge'; 
GO 
-- from view (succeeds): 
SELECT a,flag FROM dbo.vMyFlags; 
GO 
-- from table (error): 
SELECT a,flag FROM dbo.MyFlags; 
GO 

也許你錯過了不正確的模式前綴的一步都有,或者創建或引用的對象。 Always, always, always use the schema prefix

相關問題