2012-06-18 11 views
10

Moja aplikacja (C#, ASP.Net) musi wstawiać, aktualizować i usuwać dane w bazie danych oraz uruchamiać procedury składowane. Muszę uniemożliwić mu modyfikację schematu DB - bez zmieniania tabel, tworzenia lub upuszczania, bez zmian w procedurach przechowywanych.Jak zezwolić użytkownikowi programu SQL Server na wstawianie/aktualizowanie/usuwanie danych, ale nie modyfikowanie schematu?

Jaką kombinację uprawnień muszę przyznać użytkownikowi aplikacji? Po prostu "wybierz" nie będzie działać, ponieważ musi wstawić/zaktualizować/usunąć dane w tabelach.

Jak sprawdzić uprawnienia i dostęp do określonego loginu? Jak przyznawać lub odmawiać uprawnień i dostępu do logowania? Muszę dać uprawnienia nowemu użytkownikowi (loginowi), aby uzyskać dostęp tylko do jednej bazy danych.

Korzystanie z SQL Server 2008 R2, z SSMS.

Odpowiedz

18

Jeśli naprawdę chcą kontrolować to na poziomie obiektu, można zrobić:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user; 

Na poziomie schematu:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user; 

Idealnie jednak, byś nie pozwalają DML ad hoc przeciwko tabelom i kontrolować wszystkie DML za pomocą procedur przechowywanych. W takim przypadku po prostu trzeba przyznać exec na samej procedury, a nie do obiektów dotyka:

GRANT EXEC ON dbo.procedure TO user; 

Podobnie, jeśli chcesz zezwolić exec na temat wszystkich procedur w określonym schemacie, można powiedzieć:

GRANT EXEC ON SCHEMA::dbo TO user; 

Jedynym wyjątkiem jest sytuacja, gdy procedura składowana tworzy dynamiczny kod SQL. W takich przypadkach może być konieczne zastosowanie uprawnień do tabel podstawowych w kontekście dynamicznego wykonywania instrukcji SQL lub może być możliwe użycie EXECUTE AS OWNER.

+0

Czy przyznanie uprawnień "aktualizuj" i "usuń" pozwala zmieniać i upuszczać tabele użytkowników? Czy mogę przyznawać uprawnienia do schematu zamiast do tabeli? – jprusakova

+1

Nie, aktualizacja i usuwanie odnoszą się do danych w tabeli, a nie do samych danych. Zawsze możesz spróbować tego. I tak, napisałem przykład, w którym można wpływać na schemat zamiast na obiekt (co może być pomocne, jeśli dodasz tabele później, uprawnienia są dziedziczone, chyba że chcesz dodać tabelę, do której użytkownik * nie ma * dostępu, wtedy musisz wyraźnie odmówić na tym stole). –

+0

dzięki, to pomaga! – jprusakova

Powiązane problemy