W Microsoft SQL Server, jaka jest różnica między uprawnieniami CREATE DATABASE
a CREATE ANY DATABASE
?
Nie mogę znaleźć wiarygodnej odpowiedzi. Najlepsze, co mogę wywnioskować, to to, że albo (a) CREATE ANY
oznacza, że mogę utworzyć bazę danych, która będzie własnością innego użytkownika, podczas gdy CREATE
nie mogę, lub (b) pierwotne pozwolenie w dniach Sybase / wczesnego SQL Server było CREATE ANY
i CREATE
jest aliasowane dla Zgodność z ANSI.
sql-server
permissions
Tohuw
źródło
źródło
Odpowiedzi:
Wydaje mi się, że znalazłem autorytatywną odpowiedź, bardzo pomocną w tabeli podanej w tym artykule: http://msdn.microsoft.com/en-us/library/ms178569.aspx . Wydaje się, że CREATE DATABASE jest rzeczywiście zgodnym z ANSI SQL uprawnieniem, podczas gdy CREATE ANY DATABASE jest zastrzeżonym prawem do serwera MSSQL. Jednak dwa nie są takie same. W rzeczywistości istnieje dość ważna różnica między nimi, a ja to odkryłem, próbując tego.
Oba są uprawnieniami, ale CREATE DATABASE sprawdza jedynie kontekst bezpieczeństwa aktualnie używanej bazy danych, podczas gdy CREATE ANY DATABASE może wyszukać listę loginów na serwerze SQL. Wydaje się, że zostało to zaimplementowane, ponieważ ogólne oczekiwanie na serwer ANSI SQL jest takie, że uprawnienia są przyznawane w głównej bazie danych systemu, a użytkownicy w tej bazie danych mają uprawnienia. Następnie domyślnym zachowaniem nowych baz danych jest skonsultowanie się z masterem, aby zobaczyć, jakie uprawnienia powinien odziedziczyć. (SQL 101, wiem, ale tutaj jest naprawdę przykładem).
Tak więc, kiedy udzielisz CREATE DATABASE, musisz mieć użytkownika nadrzędnego, aby udzielić tego uprawnienia. Jeśli spróbujesz tego, to zadziała (utwórz użytkownika w systemie głównym, utwórz go, utwórz bazę danych). Jednakże, przyznając utworzenie dowolnej bazy danych (lub przyznając rolę dbcreator), nie musisz być dosłownym użytkownikiem w systemie głównym.
Aby dodatkowo zilustrować różnicę między tymi dwoma uprawnieniami, obserwuj różne komunikaty zwracane przez udzielenie użytkownikowi UTWÓRZ BAZY DANYCH w bazie danych w porównaniu z inną bazą danych, a następnie spłucz i powtórz dla uzyskania pozwolenia UTWÓRZ DOWOLNĄ BAZĘ DANYCH.
Ten błąd występuje, ponieważ użytkownik TestUser nie znajduje się jeszcze w głównej bazie danych. Jest to uprawnienie na poziomie bazy danych - nie ma kontekstu, aby wyjść poza wybraną bazę danych i poszukać danych logowania lub użytkowników. Zauważ, że jeśli najpierw utworzysz użytkownika w trybie głównym, to polecenie się powiedzie i możesz utworzyć bazy danych tak, jakbyś utworzył TWOJĄ DOWOLNĄ BAZĘ DANYCH.
Udaje się to, ponieważ jako zastrzeżone uprawnienia Microsoft SQL Server, UTWÓRZ DOWOLNĄ BAZĘ DANYCH może przeglądać listę loginów instancji SQL, a nie tylko użytkowników w aktualnie używanej bazie danych.
To pokazuje spójność mojego wyjaśnienia dla pierwszego przykładu. Zwróć uwagę na poniższe zapytanie i wynikowy komunikat o błędzie. Ten komunikat o błędzie nie zostanie wyświetlony, jeśli najpierw utworzysz użytkownika w tej bazie danych (patrz ostatnie zapytanie).
Jak pokazano w drugim zapytaniu, UTWÓRZ DOWOLNĄ BAZĘ DANYCH sprawdza listę logowań, na której już utworzyłem tę nazwę logowania. Tak więc, chociaż SQL Server potwierdził istnienie użytkownika, nadal występuje błąd, ponieważ próbuję przyznać uprawnienia na poziomie serwera w innym miejscu niż master, co nie jest dozwolone w MSSQL.
Teraz, gdy istnieje użytkownik, do którego można zastosować aplikację CREATE DATABASE, otrzymuję ogólny komunikat o błędzie, że nie można nadać uprawnień na poziomie serwera nigdzie poza urządzeniem głównym, ponieważ to tutaj SQL Server przechowuje te uprawnienia.
To była dobra zabawa.
źródło