O comando correto de administração numa instalação SQL Server que concede a permissão de execução de uma stored procedure X num esquema (schema) Y para um papel (role) Z é:
- A)ALLOW EXECUTE(X) FOR Y.Z;
Errada, porque ALLOW não é a sintaxe de concessão de permissão no SQL Server e a estrutura X/Y.Z também não corresponde ao comando real.
- B)CALL EXECUTE_PERMISSION X(Y.X);
Errada, porque CALL EXECUTE_PERMISSION não existe como comando válido no T-SQL e a forma de referenciar schema e procedure está incorreta.
- C)FOR X IN Y ALLOW EXECUTE TO Z;
Errada, porque FOR X IN Y ALLOW EXECUTE TO Z não é sintaxe do SQL Server e mistura construções que não são usadas em permissões.
- D)GRANT EXECUTE ON OBJECT::Y.X TO Z;
Certa, porque no SQL Server a concessão de execução sobre uma stored procedure é feita com GRANT EXECUTE ON OBJECT::schema.procedure TO role.
- E)GRANT USER Z EXEC X UNDER Y.
Errada, porque GRANT USER Z EXEC X UNDER Y não corresponde a nenhum comando válido de administração de permissões no SQL Server.
Gabarito: D
No SQL Server, permissões de objeto são dadas com o verbo GRANT, seguido da permissão e do alvo exato. Quando voce quer permitir a execução de uma stored procedure, a forma padrão é algo como GRANT EXECUTE ON OBJECT::schema.procedimento TO principal. Aqui, o esquema (schema) entra no nome totalmente qualificado do objeto, porque a procedure pertence a esse schema. O papel (role) recebe a permissão, e depois qualquer usuario membro desse role herda esse acesso. Isso é bem a cara do SQL Server: sintaxe objetiva, sem firulas, mas com detalhes que a banca adora trocar de lugar. No enunciado, a procedure X está no schema Y e a permissão vai para o role Z. Logo, o comando correto precisa indicar o objeto com o prefixo do schema e usar TO Z para conceder ao papel. Por isso, GRANT EXECUTE ON OBJECT::Y.X TO Z está certo. O trecho OBJECT:: é a notação usada no SQL Server para deixar claro que se trata de um objeto específico do banco, e não de uma permissão genérica. As demais alternativas erram a sintaxe, trocam palavras-chave ou inventam estruturas que não existem no T-SQL. Em prova, vale lembrar: no SQL Server, para dar permissão de executar procedure, o padrão é GRANT EXECUTE ON [OBJECT|SCHEMA] ... TO ...; se o objeto tem schema, ele aparece no nome do objeto. Essa lógica está alinhada ao modelo de permissões do próprio SQL Server, descrito na documentação da Microsoft sobre GRANT e permissões em objetos. Resumo de bolso: procedure no schema? Nome qualificado. Quer conceder execução? GRANT EXECUTE. Quer dar ao role? TO role. Se alguma alternativa fugir disso, desconfie, porque provavelmente a banca colocou uma sintaxe “fantasia” para testar sua memória e sua calma.