2009-02-02 7 views
5

Mam skrypt TSQL, który jest używany do konfigurowania bazy danych w ramach instalacji mojego produktu. Wymaga wielu kroków, które razem zajmują pięć minut. Czasami ten skrypt nie powiedzie się w ostatnim kroku, ponieważ użytkownik uruchamiający skrypt nie ma wystarczających uprawnień do bazy danych. W tym przypadku chciałbym, aby scenariusz zawiódł. Aby to zrobić, chcę, aby skrypt sprawdził, jakie prawa ma z góry. Czy ktokolwiek może wskazać mi ogólny sposób testowania, czy skrypt działa z określonym uprawnieniem bezpieczeństwa?W jaki sposób skrypt TSQL programu SQL Sever może określić, jakie ma uprawnienia zabezpieczeń?

Edit: W szczególnym przypadku Patrzę na niego stara się zrobić kopię zapasową, ale miałem inne sprawy idą źle i był nadzieją na rozwiązanie ogólnego przeznaczenia.

Odpowiedz

4
select * from fn_my_permissions(NULL, 'SERVER') 

Daje listę uprawnień obecna sesja na serwerze

select * from fn_my_permissions(NULL, 'DATABASE') 

Daje listę uprawnień dla bieżącej sesji w bieżącej bazie danych.

See here for more information.

+0

Bardzo dziękuję, widzę z posta MSDN, że to, czego chcę, to IF HAS_PERMS_BY_NAME (db_name(), "BAZY DANYCH", "BACKUP DATABASE") <> 1, ale ten wpis wskazywał mi tam. –

0

Zakładam, że kończy się niepowodzeniem na aktualizacji lub wstawi po długiej serii wyborów.

Po prostu wypróbuj aktualizację prostą lub włóż ją do transakcji. Twardy kod identyfikatora wiersza lub cokolwiek innego, aby uczynić go prostym i szybkim.

Nie dokonuj transakcji - zamiast tego wycofaj ją.

Jeśli nie masz uprawnień do wstawiania lub aktualizacji, powinno to zawieść. Jeśli to zrobisz, cofnie się i nie spowoduje trwałej zmiany.

+0

W tym konkretnym przypadku, gdy patrzę na to, próbuję zrobić kopię zapasową, ale miałem inne rzeczy, które poszły nie tak i miałem nadzieję na rozwiązanie ogólnego przeznaczenia. –

+0

Ah .... Hmm. W takim razie byłoby to trochę trudniejsze. – BradC

0

spróbować ostatni insert/update do góry przód z niektórymi gdzie stan jak

insert/update 
where 1=2 

if (@@error <> 0) 
    raise error 6666 'no permissions' 

ten nie spowoduje żadnych szkód, ale podniesie flagę góry o braku uprawnień.

Powiązane problemy