INF: 数据库中检查的对象所有权链依赖于映射到对象所有者的登录

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 272424
本文已归档。它按“原样”提供,并且不再更新。
概要
SQL Server 联机丛书指出所有权链进行检查的存储的过程和跨数据库的视图。您可以看到这很容易地时在每个数据库中相关的对象的所有者将映射到相同的登录。如果您在两个具有相同的用户名,但不是数据库中有用户但是,映射到同一个登录 (为通常会发生这种情况与数据库所有者 [DBO]),它可能看起来不正确地检查所有权链。例如对于如果每个数据库的 DBO 映射到该同一登录,并且在数据库中对象的所有者是该 DBO 权限不会检查。但是,如果每个数据库的 DBO 被映射到不同的登录,所有权链检查。可能会发生这种情况与该 DBO 以外的用户如果您的用户名称不同于您的登录名。
更多信息
上一个视图或存储的过程的权限可以授予用户在数据库中。如果该视图或存储的过程访问由映射到不同的登录的用户拥有的另一个数据库中的对象,则检查基础对象的权限。如果用户在其他数据库中没有对该对象的权限,将返回以下错误:
拒绝了对对象的错误 229: %1! ' 权限 %.* ls、 数据库 %* 1! ''、 $ 所有者 %* 1! ''。
但是,如果基础查询中的对象的映射的登录相同,不检查权限,即使用户没有对基础表的权限,而上面的错误不执行查询。

若要查看此示例,请按照下列步骤操作:
  1. 设置与两个不同的数据库 ; 一个擅自复制环境向上 db1 是"基本"数据库的数据和 db2 包含从 db1 在表中选择一个视图
    USE masterGOCREATE DATABASE db1CREATE DATABASE db2EXEC sp_addlogin Owner1EXEC sp_addlogin Owner2EXEC sp_addlogin TestUserGO-- setup database #1, DBO is Owner1USE db1EXEC sp_changedbowner Owner1EXEC sp_adduser TestUserCREATE TABLE BaseTable (TableColumn CHAR(20))INSERT BaseTable VALUES ('Select Succeeded')GO-- setup database #2USE db2EXEC sp_adduser TestUserGOCREATE VIEW      CrossDatabaseView           AS SELECT * FROM db1.dbo.BaseTableGOGRANT SELECT  ON CrossDatabaseView           TO publicGO					
  2. 执行下面的代码,以查看不同的结果基于该 DBO 是否是相同或不同:
    SET NOCOUNT ONGOPRINT '***** results with both DBOs the same *****'PRINT ''USE db2EXEC sp_changedbowner Owner1SETUSER 'TestUser'GOSELECT * FROM CrossDatabaseViewGOSETUSERGOPRINT ''PRINT '***** results with each DBO different *****'PRINT ''USE db2EXEC sp_changedbowner Owner2SETUSER 'TestUser'GOSELECT * FROM CrossDatabaseViewGOSETUSERGO					
  3. 清理数据库和创建为使本示例登录:
    USE masterGODROP DATABASE db1DROP DATABASE db2EXEC sp_droplogin Owner1EXEC sp_droplogin Owner2EXEC sp_droplogin TestUserGO					
跨之间 DBO 跨数据库所有权的安全性 BOL 相交

警告:本文已自动翻译

属性

文章 ID:272424 - 上次审阅时间:01/16/2015 20:42:15 - 修订版本: 4.3

Microsoft SQL Server 7.0 标准版, Microsoft SQL Server 2000 标准版

  • kbnosurvey kbarchive kbmt kbinfo kbpending KB272424 KbMtzh
反馈