Minha empresa está migrando para um modelo de segurança muito mais restritivo em um futuro próximo.
Como parte disso, estamos alterando servidores específicos para o novo modelo e testando todos os nossos processos existentes. Um dos processos que eu uso muito utiliza a estrutura SMO para criar scripts de objetos de banco de dados em ordem de dependência, para que possamos executar esses scripts em outro servidor.
A parte da ordem de dependência é muito importante, pois temos muitos objetos aninhados (pense em visualizações que fazem referência a outras visualizações).
Com o novo modelo de segurança instalado, esse script parou de funcionar corretamente.
Também testei no SSMS (SSMS 2012 em uma instância 2008r2) e usar View Dependencies
em uma exibição que faz referência a outra exibição no mesmo banco de dados não mostra a exibição referenciada em Objects on which [this view] depends
.
Ainda mais preocupante, se eu executar sp_depends
a exibição em questão , obtenho uma lista precisa de dependências.
Pesquisei um pouco e não consegui encontrar uma resposta definitiva, então espero que alguém possa me ajudar:
Quais permissões específicas são necessárias para que um usuário exiba com precisão as dependências no SQL Server 2008r2 e/ou SQL Server 2012 (vamos atualizar em breve).
O tópico 2012 Books Online "Obter informações sobre uma exibição" afirma que as permissões necessárias para esta tarefa específica são:
VIEW DEFINITION
permissão no banco de dados ; eSELECT
permissão em sys.sql_expression_dependenciesObserve que o nível do banco de dados
VIEW DEFINITION
é necessário para permitir que o usuário veja informações emsys.sql_expression_dependencies
; nível de objetoVIEW DEFINITION
eSELECT
no DMV não funcionará (você receberá um conjunto de resultados vazio).Exemplo:
Em relação a sp_depends : isso requer apenas associação à
public
função, mas está obsoleto: