INF: 檢查跨資料庫的物件擁有權鏈結取決於已對應到物件擁有者的登入

文章翻譯 文章翻譯
文章編號: 272424 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

SQL Server 線上叢書 》 指出預存程序和跨資料庫的檢視表會檢查擁有權鏈結。您可以看到這很容易地時每個資料庫中的相依物件的擁有者會對應到相同的登入。不過,如果您在具有相同的使用者名稱,但不是這兩個資料庫中有使用者對應到相同的登入 (隨時發生與資料庫擁有者 [DBO]),似乎擁有權鏈結被不正確地檢查。比方說如果 DBO 的每個資料庫對應到相同的登入且資料庫中物件的擁有者是在 DBO,不檢查權限。不過,如果每個資料庫 DBO 對應到不同的登入,會檢查擁有權鏈結。就可能發生這種情況與 [DBO 以外的其他使用者如果您使用者名稱不同於登入名稱。

其他相關資訊

一個資料庫中的使用者可以被授與檢視表或預存程序的權限。如果該檢視表或預存程序存取由對應到不同的登入使用者所擁有的另一個資料庫中的物件,檢查基礎物件的權限。如果使用者在其他資料庫中沒有物件的權限,會傳回下列錯誤:
錯誤 229: %1! 上的權限被拒絕物件 '%* ls' ',資料庫' %*! ''、 擁有者' %*! ''。
不過,如果基礎對應的登入,在查詢中的物件的相同,不檢查權限,並沒有上述的錯誤如果即使使用者沒有基礎資料表的權限執行的查詢。

若要查看這個範例,請依照下列步驟執行:
  1. 設定具有兩個不同的資料庫 ; 一個重製環境向上 db1 是基地"資料庫與資料並 db2 包含 db1 在表格中選取的檢視
    USE master
    GO
    CREATE DATABASE db1
    CREATE DATABASE db2
    EXEC sp_addlogin Owner1
    EXEC sp_addlogin Owner2
    EXEC sp_addlogin TestUser
    GO
    -- setup database #1, DBO is Owner1
    USE db1
    EXEC sp_changedbowner Owner1
    EXEC sp_adduser TestUser
    CREATE TABLE BaseTable (TableColumn CHAR(20))
    INSERT BaseTable VALUES ('Select Succeeded')
    GO
    -- setup database #2
    USE db2
    EXEC sp_adduser TestUser
    GO
    CREATE VIEW      CrossDatabaseView           AS SELECT * FROM db1.dbo.BaseTable
    GO
    GRANT SELECT  ON CrossDatabaseView           TO public
    GO
    					
  2. 執行以下的程式碼,以查看不同的結果根據 [DBO 是否是相同或不同:
    SET NOCOUNT ON
    GO
    PRINT '***** results with both DBOs the same *****'
    PRINT ''
    USE db2
    EXEC sp_changedbowner Owner1
    SETUSER 'TestUser'
    GO
    SELECT * FROM CrossDatabaseView
    GO
    SETUSER
    GO
    
    PRINT ''
    PRINT '***** results with each DBO different *****'
    PRINT ''
    USE db2
    EXEC sp_changedbowner Owner2
    SETUSER 'TestUser'
    GO
    SELECT * FROM CrossDatabaseView
    GO
    SETUSER
    GO
    					
  3. 清理資料庫和為使本範例建立的登入:
    USE master
    GO
    DROP DATABASE db1
    DROP DATABASE db2
    EXEC sp_droplogin Owner1
    EXEC sp_droplogin Owner2
    EXEC sp_droplogin TestUser
    GO
    					

屬性

文章編號: 272424 - 上次校閱: 2004年2月5日 - 版次: 4.3
這篇文章中的資訊適用於:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
關鍵字:?
kbmt kbinfo kbpending KB272424 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:272424
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com