Worin besteht der Unterschied zwischen den Berechtigungen CREATE DATABASE
und in Microsoft SQL Server CREATE ANY DATABASE
?
Ich kann keine verbindliche Antwort finden. Das Beste, woraus ich schließen kann, ist, dass entweder (a) CREATE ANY
impliziert, dass ich die Datenbank erstellen kann, die einem anderen Benutzer gehört, wohingegen CREATE
ich dies nicht kann, oder (b) die ursprüngliche Berechtigung in den Tagen von Sybase / SQL Server war CREATE ANY
und CREATE
für die ein Alias besteht ANSI-Konformität.
sql-server
permissions
Tohuw
quelle
quelle
Antworten:
Ich glaube, ich habe die maßgebliche Antwort gefunden, die in hohem Maße durch die Tabelle in diesem Artikel unterstützt wird: http://msdn.microsoft.com/en-us/library/ms178569.aspx . Es scheint, dass CREATE DATABASE tatsächlich die ANSI SQL-kompatible Berechtigung ist, während CREATE ANY DATABASE eine MSSQL-geschützte Serverberechtigung ist. Die beiden sind jedoch nicht gleich. In der Tat gibt es einen ziemlich wichtigen Unterschied zwischen den beiden, und ich habe dies herausgefunden, indem ich es ausprobiert habe.
Sie sind beide Berechtigungen, aber CREATE DATABASE überprüft nur den Sicherheitskontext der aktuell verwendeten Datenbank, während CREATE ANY DATABASE die Liste der Anmeldungen auf dem SQL Server nachschlagen kann. Dies scheint implementiert zu sein, da die allgemeine Erwartung für einen ANSI-SQL-Server darin besteht, dass Berechtigungen in einigen Hauptsystemdatenbanken vergeben werden und Benutzern in dieser Datenbank Berechtigungen erteilt werden. Das Standardverhalten neuer Datenbanken besteht darin, den Master zu konsultieren, um festzustellen, welche Berechtigungen er erben soll. (SQL 101, ich weiß, aber es ist hier wirklich beispielhaft.)
Wenn Sie also CREATE DATABASE gewähren, müssen Sie tatsächlich einen Benutzer im Master haben, dem Sie diese Berechtigung erteilen können. Wenn Sie dies versuchen, funktioniert es (erstellen Sie einen Benutzer in master, gewähren Sie ihm create database, dann können Sie Datenbanken erstellen). Wenn Sie jedoch die Berechtigung zum Erstellen einer Datenbank (oder zum Gewähren der Rolle "dbcreator") erteilen, müssen Sie kein Literalbenutzer in master sein.
Um den Unterschied zwischen den beiden Berechtigungen weiter zu veranschaulichen, beobachten Sie die unterschiedlichen Meldungen, die durch Erteilen eines Benutzer CREATE DATABASE auf dem Master im Vergleich zu einer anderen Datenbank zurückgegeben werden. Spülen Sie dann die Berechtigung CREATE ANY DATABASE und wiederholen Sie sie.
Dieser Fehler tritt auf, weil sich der Benutzer TestUser noch nicht in der master-Datenbank befindet. Dies ist eine Berechtigung auf Datenbankebene. Sie hat keinen Kontext, um außerhalb der ausgewählten Datenbank nach Anmeldungen oder Benutzern zu suchen. Wenn Sie den Benutzer zuerst in master erstellen, ist dieser Befehl erfolgreich und Sie können Datenbanken genauso erstellen, als ob CREATE ANY DATABASE Ihnen gewährt worden wäre.
Dies ist erfolgreich, da CREATE ANY DATABASE als proprietäre Microsoft SQL Server-Berechtigung die Liste der Anmeldungen für die SQL-Instanz und nicht nur die Benutzer in der aktuell verwendeten Datenbank einsehen kann.
Dies zeigt die Konsistenz meiner Erklärung für das erste Beispiel. Beachten Sie die folgende Abfrage und die daraus resultierende Fehlermeldung. Diese Fehlermeldung wird nicht angezeigt, wenn Sie den Benutzer zum ersten Mal in dieser Datenbank erstellen (siehe letzte Abfrage).
Wie in der zweiten Abfrage gezeigt, durchsucht CREATE ANY DATABASE die Liste der Anmeldungen, bei denen ich diesen Anmeldenamen bereits erstellt habe. Obwohl SQL Server die Existenz des Benutzers bestätigt hat, tritt ein Fehler auf, da ich versuche, eine Berechtigung auf Serverebene an einer anderen Stelle als dem Master zu erteilen, die in MSSQL nicht zulässig ist.
Nachdem es nun einen Benutzer für CREATE DATABASE gibt, auf den sich CREATE DATABASE anwenden lässt, wird die generische Fehlermeldung angezeigt, dass Sie Berechtigungen auf Serverebene nur auf master-Ebene erteilen können, da SQL Server diese Berechtigungen dort speichert.
Nun, das hat Spaß gemacht.
quelle