Eu estou querendo saber por que, para função de valor escalar, que eu tenho que conceder ao usuário para executar em vez de apenas um select?
enquanto isso, uma função com valor de tabela funciona bem com apenas permissão ou db_datareader
associação de seleção.
para ser mais claro aqui está o meu exemplo: Eu preciso de um usuário que tenha permissão somente leitura para o banco de dados. então eu criei um usuário chamado testUser
e dei a ele uma db_datareader
associação. então eu criei uma função com valor de tabela chamada fn_InlineTable
. E tudo é ótimo. testUser
executa esse SQL o dia todo
select * from dbo.fn_InlineTable
então eu preciso de uma função escalar, então criei uma função escalar chamada fn_ScalarTest
.
testUser
não pode executar este SQL
Select dbo.fn_ScalarTest(1)
Bem compreensivelmente: é porque eu não dei permissão "testUser" para executar fn_ScalarTest
.
Minha pergunta é: com base neste link https://stackoverflow.com/questions/6150888/insert-update-delete-with-function-in-sql-server , que diz que FUNCTION
não pode ser usado para executar ações que modificam o estado do banco de dados . Então, por que não permitir que uma função escalar seja usada com a mesma permissão "SELECT" em vez de permissão de execução?
Espero que minha pergunta faça sentido. Obrigada.