Nazwa bazy w zmiennej funkcji + zaszyfrowanie funkcji

0

Cześć,
mam przykładową funkcję napisaną w SQL Server w stylu:

CREATE FUNCTION nazwa_funkcji (@index int)
RETURNS Decimal(15,2)
AS
BEGIN
RETURN
	(
	SELECT
		Zmienna
	FROM
		[NazwaBazy].[WDK].[Tabela]
	WHERE
		Zmienna_2 = @ index
	)
END

Mam teraz dwa pytania:

  1. Czy da się zastąpić nazwę bazy przy podaniu tabeli zmienną zadeklarowaną wcześniej. Np. coś w stylu (przykład nie działa):
CREATE FUNCTION nazwa_funkcji (@index int)
RETURNS Decimal(15,2)
AS
BEGIN
declare @nazwa_bazy varchar(30)
@nazwa_bazy = 'NazwaBazy'
RETURN
	(
	SELECT
		Zmienna
	FROM
		@nazwa_bazy.[WDK].[Tabela]
	WHERE
		Zmienna_2 = @ index
	)
END
  1. Czy mógłby mi ktoś pokazać jak powinno wyglądać zbudowanie analogicznej funkcji jak wyżej tylko zaszyfrowanej tak, by żaden administrator nie był wstanie odczytać ciała funkcji? Wiem, że gdzieś trzeba dodać jakiś dodatkowy opcjonalny parametr ale nie wiem jak :(.

Chodzi o to, że chcę mieć kontrolę w której bazie wykorzystywana jest funkcja (musi być pod konkretną bazę - więc nie można pominąć nazwy bazy) oraz nie chcę, by ktoś miał dostęp do zawartości funkcji (jestem jej autorem).

Z góry dziękuję za pomoc!

1

Administrator bazy ma uprawnienia do wszystkiego, w tym do wszystkich funkcji we wszystkich bazach danych. Funkcji i procedur sql nie można zaszyfrować, możesz co najwyżej obfuskować kod, czyli uczynić go możliwie nieczytelnym, jednak w przypadku tak krótkiego kodu nie będzie to łatwe.
Zresztą po co Ci takie dziwne rozwiązanie? Ukrywanie zawartości, do której i tak większość ludzi nie ma dostępu, a te kilka osób z uprawnieniami zawartości tej nie zmieni, bo nie będzie miało w tym żadnego celu, to moim zdaniem strata czasu.

0

Dziękuję Wam bardzo za pomoc. Szczególnie Tobie @vpiotr
Na koniec tylko chciałem się upewnić: czy jak zaszyfruję funkcję przy pomocy ENCRYPTION to administrator będzie mógł ją odczytać?

1
Księgowy napisał(a):

Dziękuję Wam bardzo za pomoc. Szczególnie Tobie @vpiotr
Na koniec tylko chciałem się upewnić: czy jak zaszyfruję funkcję przy pomocy ENCRYPTION to administrator będzie mógł ją odczytać?

Gdzieś widziałem info, że admin zawsze może przeczytać bezpośrednio pliki bazy i tam ten kod leży niezaszyfrowany.
Ale to chyba admin musiałby mieć dużo samozaparcia. W takim wypadku pewnie dobrze by było dodać obfuskację.
Najlepiej jakby się jakiś spec od MS SQL wypowiedział.

1

Szkoda prądu na szyfrowanie przez bazę danych:
Zaszyfrowanie funkcji SQL Server

Deszyfrowanie naprawdę jest banalne; używam RedGate SQLPrompt - ta zabawka deszyfruje procedury w locie. Rozwiązań za firko jest od metra. Naprawdę, szkoda prądu - zysk żaden, za to kolejny kłopot (co prawda drobny, ale jednak) przy aktualizacjach...

1 użytkowników online, w tym zalogowanych: 0, gości: 1