Tablo değerli bir işlev için izinler nasıl verilir


21

Doğru yapıyor muyum...?

Para iade eden bir fonksiyonum var ...

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

Sadece bu iTVF dönüştürmek mümkün olup olmadığını merak ediyorum?

Bunu denedim ama bir hata var:

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

HATA:

Msg 4606, Seviye 16, Durum 1, Satır 2 İzin verilen veya iptal edilen ayrıcalık EXECUTE, nesne ile uyumlu değil.

Bu işlev şu şekilde kullanılır:

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

Şimdiden teşekkürler!


Şimdi bir tablo döndürdüğünüz için, GRANT EXECUTE yerine GRANT deyiminin GRANT SELECT olması gerekir.
Mike

Yanıtlar:


33

Skaler işlevler EXECUTEizin gerektirir , ancak Tablo Değerli İşleve dönüştürdüğünüzde gereken izinler olarak değişir SELECT.

Şimdi yapmalısın GRANT SELECT ON functionName TO another_user;

Gönderen BOL :

Sahip dışında bir kullanıcıya, bir Transact-SQL deyiminde kullanabilmeleri için bir işlev üzerinde (işlev skaler değerli ise) EXECUTE izni verilmelidir. İşlev tablo değerliyse, kullanıcının işleve başvurmadan önce işlev üzerinde SELECT izinlerine sahip olması gerekir.


Ve RDFozz'un başka bir yanıta yaptığı yorumda, kullanıcı adında özel karakterler varsa (DOMAINNAME \ kullanıcı adında olduğu gibi bir ters eğik çizgi gibi), kullanıcı adını köşeli parantez içine koymanız gerekir, viz:grant select on functionName to [DOMAINNAME\username];
youcantryreachingme

0

Olması gerekir GRANT SELECT ON functionName TO [another_user]- parantez ile.


Köşeli parantezler, kullanıcı adı özel bir karakter içermedikçe isteğe bağlıdır. Ters eğik çizgi özel bir karakter olduğundan ve genellikle Windows kimlik doğrulama oturumlarına sahip kullanıcılar için kullanıcı adının bir parçası olacağından, parantez kullanma alışkanlığı içinde olmak en güvenli yöntemdir.
RDFozz

-4

Kullanmaya çalıştım:

GRANT SELECT ON functionName TO another_user

Ama işe yaramadı, EXECUTEyerine kullandım SELECTve şimdi çalışıyor


grant executeBir SQL işlevini denemek her zaman bir hata atacağından , bunu nasıl yönettiğinizi merak ediyorum .
Ian Kemp

3
Muhtemelen tablo değerli bir fonksiyon değildi, bu yüzden işe yaradı.
Diego
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.