Uprawnienia SQL Server do tworzenia, przywracania, usuwania tylko niektórych baz danych

17

Na MS SQL Server 2008 R2 muszę mieć użytkownika, który może tworzyć, przywracać, DBCC CHECKDB, a następnie upuszczać bazy danych. Nie może jednak mieć dostępu do określonych baz danych na serwerze ani ich usuwać (ze względów bezpieczeństwa). Czy to możliwe?

Cicik
źródło
Możesz uzyskać kilka wskazówek tutaj: toadworld.com/platforms/sql-server/w/wiki/…
dezso

Odpowiedzi:

27

Tak, jest to możliwe dzięki kilku uprawnieniom.

Po pierwsze - aby utworzyć bazę danych - musisz udzielić uprawnienia na poziomie serwera Create Any Database. To uprawnienie działa tak, jak się wydaje - moc tworzenia bazy danych. Uwaga ta jest nie dając stałą rolę serwera dbcreator do logowania, ponieważ stała rola serwera daje alter / Usuń uprawnienia dowolnej bazy danych. Create Any Databasepozwala loginowi mieć tę władzę tylko nad bazami danych, które posiadają. To da również możliwość przywrócenia.

(Więc wykonując TYLKO „Utwórz dowolną bazę danych” - dajesz możliwość utworzenia nowej bazy danych, ale unikasz możliwości usunięcia lub zmiany DOWOLNEJ bazy danych, które można dostać za pomocą rolę dbcreator stałe serwera)

Aby udzielić tego uprawnienia „Utwórz dowolną bazę danych” -

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

Aby móc uruchamiać DBCC CHECKDBi usuwać bazy danych - wystarczy stała rola bazy danych db_owner. Zapewnia to wszystko, o co prosisz. Uwaga: Użytkownik zapewnia również użytkownikowi możliwość wybierania, usuwania, obcinania, aktualizowania i wstawiania za pomocą db_owner. Lubię myśleć o tym jak sysadminw bazie danych.

Będziesz stosował to uprawnienie tylko do bazy danych, na której zamierzasz mieć tę możliwość. To pozwoli ci kontrolować, które bazy danych użytkownik może upuszczać, przywracać lub sprawdzać. Wszystkie bazy danych, w których użytkownik nie otrzymał tych uprawnień, będą bezpieczne od tego użytkownika wykonującego te czynności

Aby to zrobić, najpierw mapuj login na użytkownika bazy danych:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

A następnie dodaj tego użytkownika do db_ownerroli (Działa w SQL Server 2012 i nowszych):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

W przypadku programu SQL Server 2008 trzeba użyć systemowej procedury składowanej, aby dodać członka roli jako komentator poniżej słusznie wskazany:

EXEC sp_addrolemember 'db_owner', 'frank';

Możesz to wszystko zrobić również poprzez GUI. Informacje logowania, które zrobiłbyś w folderze zabezpieczeń w SSMS na poziomie instancji: Kliknij prawym przyciskiem myszy login -> Właściwości -> Zabezpieczenia. Na poziomie bazy danych zrobiłbyś to przez folder bezpieczeństwa na poziomie bazy danych: kliknij prawym przyciskiem myszy i wybierz nowego użytkownika -> wybierz login, którego chcesz używać z listy logowania do serwera / podaj nazwę użytkownika bazy danych -> przejdź do kartę członkostwa, aby wybrać członkostwo w roli.

System pomocy programu SQL Server, Books Online, jest fantastycznym źródłem większości pytań dotyczących uprawnień - jeśli stwierdzisz, że musisz przypisać inne uprawnienia. Po prostu wyszukaj komendę T-SQL, której chcesz udzielić uprawnień , aw artykule zwykle znajduje się sekcja Zezwolenia dla tej komendy, która informuje, jakie uprawnienia są wymagane do wykonania tej akcji. Możesz na przykład zobaczyć artykuł dla DBCC CHECKDB - około 7/8 w dół tego artykułu to sekcja uprawnień.

Mike Walsh
źródło
3
Chciałbym tylko dodać, że ALTER ROLE [db_owner] ADD MEMBER [frank]działa tylko z SQL Server 2012. Jeśli korzystasz z SQL Server 2008, powinieneś skorzystać z SP: EXEC sp_addrolemember 'db_owner', 'frank';(Patrz tutaj i tutaj )
superjos 16.03.2013