테이블 반환 함수에 권한을 부여하는 방법


21

내가 제대로하고 있니?

돈을 돌려주는 기능이 있습니다 ...

CREATE FUNCTION functionName( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  RETURNS money AS BEGIN

  DECLARE @v_dint money   set @v_dint = computation_here
     set @v_dint = round(@v_dint, 2)

  RETURN @v_dint    
END 
GO 
Grant execute on functionName to another_user 
Go

이것이 iTVF로 변환 될 수 있는지 궁금합니다.

이 작업을 시도했지만 오류가 발생했습니다.

CREATE FUNCTION functionName ( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  
RETURNS TABLE AS 
RETURN SELECT returnMoney = computation_here  
GO  
Grant execute on functionName to another_user  Go

오류:

메시지 4606, 수준 16, 상태 1, 줄 2 권한 부여 또는 취소 된 권한 EXECUTE가 개체와 호환되지 않습니다.

이 기능은 다음과 같이 사용됩니다 :

update table_name set interest = functionName(col1,col2...) where...

미리 감사드립니다!


이제 테이블을 리턴 할 때 GRANT 문은 GRANT EXECUTE가 아니라 GRANT SELECT 여야합니다.
Mike

답변:


33

스칼라 함수에는 EXECUTE권한이 필요 하지만 테이블 반환 함수로 변환하면 필요한 권한이로 변경됩니다 SELECT.

당신은 지금해야합니다 GRANT SELECT ON functionName TO another_user;

에서 BOL :

소유자 이외의 사용자에게는 Transact-SQL 문에서 함수를 사용하기 전에 함수에 대한 EXECUTE 권한이 부여되어야합니다 (함수가 스칼라 값인 경우). 함수가 테이블 반환 인 경우 함수를 참조하기 전에 함수에 대한 SELECT 권한이 사용자에게 있어야합니다.


그리고 다른 답변에 대한 RDFozz의 의견에 따라, 사용자 이름에 특수 문자 (예 : DOMAINNAME \ username과 같이 백 슬래시)가있는 경우 사용자 이름을 대괄호로 표시해야합니다. viz :grant select on functionName to [DOMAINNAME\username];
youcantryreachreaching

0

그것은 할 필요가 GRANT SELECT ON functionName TO [another_user]브래킷 -.


사용자 이름에 특수 문자가 없으면 대괄호는 선택 사항입니다. 백 슬래시는 특수 문자이며 Windows 인증 로그인 사용자의 경우 사용자 이름의 일부가되기 때문에 대괄호를 사용하는 것이 가장 안전합니다.
RDFozz

-4

나는 사용하려고했다 :

GRANT SELECT ON functionName TO another_user

하지만 작동하지 않아서 EXECUTE대신 대신 사용 SELECT했으며 이제는 작동합니다.


grant executeSQL 함수 를 시도 하면 항상 오류가 발생 하기 때문에 어떻게 관리했는지 궁금 합니다.
Ian Kemp

3
아마도 테이블 반환 함수가 아니었기 때문에 작동했습니다.
Diego
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.