2015-01-16 31 views
0

我定義成以下視圖myCustomDatabase如何賦予用戶對視圖的訪問權限,但不允許視圖正在使用的表格?

CREATE VIEW myCustomDatabase.dbo.myView AS 
    SELECT job_id FROM msdb.dbo.sysjobhistory 

myCustomDatabase的主人是SA

我的當前用戶(稱爲currentUser)只會對myCustomDatabasedb_reader作用。

guest is enabled on msdb database。

當我執行我得到以下錯誤的觀點:

The SELECT permission was denied on the object 'sysjobhistory', database 'msdb', schema 'dbo'. 

我瞭解自己現有的用戶沒有在系統數據庫中定義的角色。

我應該給我當前用戶允許他執行視圖(其中只包含系統的一列)的角色/授權,但不能授予他對錶格的完全訪問權限。

要繼續下面的觀點應該工作時currentUser稱爲:

CREATE VIEW myCustomDatabase.dbo.myView AS 
    SELECT job_id FROM msdb.dbo.sysjobhistory 

,而不是下面的查詢:

SELECT * FROM msdb.dbo.sysjobhistory 

編輯:可視表中MSDB


EDIT2:我的SQLServer的版本是2008年

回答

2

您不需要授予只要所有權鏈是完整的視圖引用的表的權限。在不同的數據庫dbo擁有對象的情況下,這要求:

  1. 這兩個數據庫已在DB_CHAINING選項打開(通過在MSDB默認 )
  2. 數據庫具有相同的所有者(「山」是MSDB的默認所有者)
  3. 用戶在其他數據庫安全上下文(賓館在msdb中啓用默認 )

因此,下面的腳本應該做的工作。

ALTER DATABASE myCustomDatabase SET DB_CHAINING ON; 
ALTER AUTHORIZATION ON DATABASE::myCustomDatabase TO sa; 

注意僅當您信任特權用戶權限創建dbo擁有的對象,你應該能夠在SA擁有數據庫DB_CHAINING。如果只有sysadmin角色成員可以創建對象,這不是一個考慮因素。另外,如果舊所有者不是sysadmin角色成員,並且您需要該登錄名以保留dbo權限,請將舊所有者作爲常規數據庫用戶添加並添加到db_owner角色。

+0

我的自定義數據庫不屬於* sa *用戶,如果我將* sa *設置爲擁有者,您建議它可以破壞一些現有的訪問規則? – Fractaliste

+0

@Fractaliste,我在帖子中添加了更多信息。這也可以通過證書來完成。如果您指定了正在使用的SQL Server版本,我將添加有關該技術的更多信息。 –

+0

如果兩個數據庫都是sa擁有的,我不需要在DATABASE :: myCustomDatabase上執行'ALTER AUTHORIZATION TO sa;'是不是? – Fractaliste

相關問題