GRANT EXECUTE do wszystkich procedur składowanych

147

Czy poniższe polecenie skutecznie daje użytkownikowi „MyUser” uprawnienie do wykonywania WSZYSTKICH procedur składowanych w bazie danych?

GRANT EXECUTE TO [MyDomain\MyUser]
Czad
źródło

Odpowiedzi:

244

SQL Server 2008 i nowsze:

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

Tylko dla użytkownika (nie roli):

USE [DBName]
GO
GRANT EXECUTE TO [user]
Antony Scott
źródło
28
+1 plus: przyznaje nawet uprawnienia EXECUTE do przyszłych procedur składowanych, np. Tych, których jeszcze nie ma w Twojej bazie danych - ale zostaną utworzone później.
marc_s
2
Myślę, że warto zauważyć, że userbyć może trzeba będzie znajdować się w nawiasach kwadratowych. Było to prawdą w moim przypadku użycia przynajmniej częściowo, ponieważ mój użytkownik miał dołączoną domenę (tj. Miał w niej znak \). edycja: naprawiono znak bez znaku ukośnika
PrinceTyke
1
Dlaczego nie przypisać użytkownika do roli db_ddladmin? „Członkowie stałej roli bazy danych db_ddladmin mogą uruchamiać dowolne polecenie języka definicji danych (DDL) w bazie danych”. - patrz tutaj
Michael Tobisch
1
@MichaelTobisch tutaj wystarczy wykonać procedury składowane. Rola DDL musi być używana w scenariuszach tworzenia, zmiany, upuszczania, ... Te linki muszą być przydatne: docs.microsoft.com/en-us/sql/relational-databases/security/ ... i geeksforgeeks.org/sql-ddl-dml-dcl-tcl-commands
QMaster
2
I następny poziom dodawania użytkownika do roli na wypadek, gdyby zaoszczędził komuś kolejny etap badań. ZMIANA ROLI db_executor DODAJ CZŁONKA
YourUserNameHere
72

SQL Server 2005 wprowadził możliwość nadawania uprawnień do wykonywania bazy danych na zasadzie bazy danych, tak jak opisano:

GRANT EXECUTE TO [MyDomain\MyUser]

Spowoduje to przyznanie uprawnień w zakresie bazy danych, co niejawnie obejmuje wszystkie procedury składowane we wszystkich schematach. Oznacza to, że nie musisz jawnie udzielać uprawnień na procedurę składowaną.

Możesz również ograniczyć, przyznając uprawnienia do wykonywania schematu, jeśli chcesz być bardziej szczegółowy:

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
Robin Minto
źródło
5
Wspaniale jest móc to zrobić w określonym schemacie, więc
unikam
17

Oprócz powyższych odpowiedzi chciałbym dodać:


Zamiast tego możesz przyznać tę rolę roli , a następnie przypisać tę rolę użytkownikom. Załóżmy, że utworzyłeś rolę myAppRightsza pośrednictwem

CREATE ROLE [myAppRights] 

wtedy możesz nadać prawa wykonywania za pośrednictwem

GRANT EXECUTE TO [myAppRights] 

do tej roli.


Lub, jeśli chcesz to zrobić na poziomie schematu:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

również działa (w tym przykładzie rola myAppRightsbędzie miała dbopóźniej uprawnienia do wykonywania wszystkich elementów schematu ).

W ten sposób wystarczy to zrobić tylko raz i można łatwo przypisać / cofnąć wszystkie powiązane prawa aplikacji użytkownikowi / użytkownikowi, jeśli zajdzie potrzeba późniejszej zmiany - jest to szczególnie przydatne, jeśli chcesz utworzyć bardziej złożone profile dostępu.

Uwaga: jeśli nadasz rolę schematowi, wpłynie to również na elementy, które utworzysz później - może to być korzystne lub nie, w zależności od zamierzonego projektu, więc miej to na uwadze.

Matt
źródło
-5

GRANT EXECUTE TO [ROLE]

Ten na pewno pomoże

Sharon AS
źródło
Nie chcesz wykonywać roli publicznej, stwarza to obawy dotyczące bezpieczeństwa. Po prostu nadaj go użytkownikowi lub roli. Przyznanie wykonania określonym procesom jest najlepszym sposobem, abyś mógł kontrolować, kto w co uderza.
ammills01
Ten sarkazm nie jest odpowiedni dla strony z pytaniami i odpowiedziami, zwłaszcza gdy daje potencjalnie niebezpieczne wyniki.
Christopher Brown,
„Każde logowanie należy do publicznej stałej roli serwera, a każdy użytkownik bazy danych należy do publicznej roli bazy danych. Gdy login lub użytkownikowi nie nadano lub odmówiono określonych uprawnień na zabezpieczanym zabezpieczeniu, login lub użytkownik dziedziczy uprawnienia nadane publicznie w dniu to zabezpieczone "Tak więc udzielenie jakichkolwiek uprawnień PUBLIC oznacza przyznanie tych uprawnień wszystkim użytkownikom. To jest duża luka. Przeczytaj to łącze, aby uzyskać dodatkowe informacje: docs.microsoft.com/en-us/sql/relational-databases/security/ ...
QMaster
Przy takich odpowiedziach nic dziwnego, że istnieje tak wiele słabo zabezpieczonych witryn i baz danych. Człowieku.
Dave Lucre