web-dev-qa-db-ja.com

テーブル値関数に権限を付与する方法

私はそれを正しくやっていますか...?

お金を返す機能があります...

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...

前もって感謝します!

22
Jack Frost

スカラー関数にはEXECUTE権限が必要ですが、テーブル値関数に変換すると、必要な権限がSELECTに変わります。

GRANT SELECT ON functionName TO another_user;

開始 [〜#〜] bol [〜#〜]

所有者以外のユーザーは、Transact-SQLステートメントで使用する前に、関数(スカラー値の場合)に対するEXECUTE権限を付与する必要があります。 関数がテーブル値の場合、ユーザーは関数を参照する前に、その関数に対するSELECT権限を持っている必要があります。

33
Mark Sinkinson

GRANT SELECT ON functionName TO [another_user]-大括弧付き。

0
jason