Pergunta:
- Eu tenho um servidor SQL Server 2005 e um servidor SQL Server 2016.
- Em cada servidor há um banco de dados (A) com um procedimento armazenado que seleciona dados de uma visualização no Banco de Dados (A)
- A visão no banco de dados (A) está referenciando uma tabela no banco de dados (B) no MESMO SERVIDOR
- Estou usando um logon que tem SOMENTE permissão de execução no procedimento armazenado no banco de dados (A).
- Esta configuração é a mesma para AMBOS os servidores.
- No servidor 2005, posso executar o SP como o logon descrito e recuperar dados por meio da exibição no banco de dados (A) da tabela no banco de dados (B) - como seria de esperar.
- No servidor 2016, recebo um erro porque no banco de dados (A) não consigo selecionar, via SP e a view, dados da tabela no banco de dados (B).
Ambos os servidores estão executando o SQL Server Standard Edition - (embora um seja 2005 e um seja 2016).
Para resumir:
SQL Server 2005
- DATABASE A = VIEW = TABLE no DATABASE B
- DATABASE A = STORED PROCEDURE = selecione em VIEW
- LOGON = APENAS EXECUTAR NO PROCEDIMENTO ARMAZENADO
- RESULTADO = SUCESSO
SQL Server 2016
- A CONFIGURAÇÃO PARECE IDÊNTICA
- RESULTADO = FALHA
Por que é isso? O que há de diferente entre essas duas versões do SQL no que diz respeito à herança de permissões? É algo muito óbvio que estou perdendo?
Qualquer indicação seria muito útil!
Eu não esperaria que as diferentes versões do SQL Server fizessem diferença aqui. Embora a configuração possa parecer idêntica, provavelmente há diferenças sutis entre os bancos de dados nos 2 servidores ou a configuração do servidor.
A primeira coisa que sugiro é verificar se os requisitos de encadeamento de propriedade entre bancos de dados foram atendidos:
Certifique-se de que a opção de configuração 'cross db ownership chaining' seja a mesma em ambos os servidores
Certifique-se de que a
DB_CHAINING
opção de banco de dados seja idênticaVerifique se os proprietários do banco de dados são os mesmos para manter uma cadeia de propriedade ininterrupta para objetos de propriedade do dbo
Se o culpado for a opção de servidor 'cross db ownership chaining', seria melhor deixar isso desmarcado e, em vez disso, ativar a
DB_CHAINING
opção de banco de dados mais granular para os bancos de dados SQL 2016 em questão.Poste a mensagem de erro real se você ainda tiver problemas após o acima.