INF: Cadeia de propriedade de objecto verificação em bases de dados depende do início de sessão que está mapeado para proprietários de objectos

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 272424
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
SQL Server Books Online indica que as cadeias de propriedade são verificadas para procedimentos armazenados e vistas que passam bases de dados. Pode ver este facilmente quando o proprietário de objectos dependentes em cada base de dados mapeia para o mesmo início de sessão. No entanto, se tiver utilizadores em ambas as bases de dados que tenham o mesmo nome de utilizador, mas não são mapeadas para o mesmo início de sessão (frequentemente como acontece com o proprietário da base de dados [DBO]), poderá parecer que cadeias de propriedade estão a ser verificadas incorrectamente. Por exemplo, se DBO de cada base de dados é mapeado para o mesmo início de sessão, o proprietário dos objectos na base de dados é o DBO permissões não estão seleccionadas. No entanto, se DBO de cada base de dados for mapeado para um início de sessão diferente, cadeias de propriedade são verificadas. Isto pode acontecer com utilizadores que não o DBO se os nomes de utilizador são diferentes dos nomes de início de sessão.
Mais Informação
Um utilizador com uma base de dados pode ser concedido permissões num vista ou procedimento armazenado. Se essa vista ou procedimento armazenado aceder a objectos de outra base de dados que é possuído por um utilizador mapeado para um início de sessão diferente, as permissões de objectos subjacentes são verificadas. Se o utilizador não tem permissões para os objectos na outra base de dados, é devolvido o seguinte erro:
Erro 229: % ls permissão negada no objecto ' %. * ls % ', da base de dados'. * 'ls, proprietário ' %. * 'ls.
No entanto, se o início de sessão mapeado subjacente dos objectos na consulta é a mesma, permissões não estão seleccionadas e executa a consulta sem o erro acima, mesmo se o utilizador não tiver permissões para as tabelas subjacentes.

Para ver um exemplo desta situação, siga estes passos:
  1. Conjunto de um ambiente de reprodução com duas bases de dados diferentes; db1 é a base de dados "Base" com os dados e db2 contém uma vista que selecciona a partir da tabela 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. Execute o seguinte código para ver os resultados diferentes consoante se o DBO é o mesmo ou diferentes:
    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. Limpar as bases de dados e inícios de sessão criados para este exemplo:
    USE masterGODROP DATABASE db1DROP DATABASE db2EXEC sp_droplogin Owner1EXEC sp_droplogin Owner2EXEC sp_droplogin TestUserGO					
segurança BOL cruzam através entre DBO entre bases de dados propriedade

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 272424 - Última Revisão: 01/16/2015 20:42:10 - Revisão: 4.3

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbinfo kbpending KB272424 KbMtpt
Comentários