Können Sie mit SQL Server (2008) die Berechtigung zum Erstellen von Tabellen innerhalb eines Schemas erteilen?

14

Ich arbeite mit Sicherheit in SQL Server 2008 und versuche, einem Benutzer CREATE TABLE-Berechtigungen zu erteilen, jedoch nur innerhalb eines bestimmten Schemas. Gilt die Berechtigung CREATE TABLE nur auf Datenbankebene?

Kann ich den Benutzer darauf beschränken, Tabellen nur innerhalb eines Schemas zu erstellen?

Ich habe es versucht:

USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO

und

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO

Der Benutzer kann jedoch immer noch keine Tabelle innerhalb des Zielschemas erstellen. Erst wenn ich das starte, kann der Benutzer eine Tabelle erstellen:

USE [databasename]
GRANT CREATE TABLE to [username]
GO

GEWÄHREN

GRANT-Datenbankberechtigungen

RyanW
quelle

Antworten:

12

Laut SQL Server 2008-Hilfe:

Erfordert die CREATE TABLE-Berechtigung in der Datenbank und die ALTER-Berechtigung für das Schema, in dem die Tabelle erstellt wird.

Ich habe dies gerade mit EXECUTE AS in einer Testdatenbank getestet und konnte eine Tabelle im Schema mit der Berechtigung ALTER erstellen, jedoch nicht im Schema dbo (für das ich keine Berechtigung ALTER erteilt habe). Solange Sie mit der ALTER-Berechtigung für Schemas nicht zu liberal geworden sind, sollten Sie dies tun.

db2
quelle
1
Ja, das sehe ich jetzt. Obwohl der Benutzer über die Berechtigung "CREATE TABLE" auf Datenbankebene verfügt, kann er keine Tabellen in Schemata erstellen, für die keine andere Berechtigung erteilt wurde.
RyanW
Es scheint auf jeden Fall bedauerlich, dass Sie eine pauschale CREATE TABLE-Berechtigung erteilen müssen, um dieses Szenario zu aktivieren.
MgSam
6

Das Erteilen der Berechtigung zum Erstellen von Tabellen für einen bestimmten Benutzer in einer bestimmten Datenbank erfordert nicht nur CREATE TABLE-Berechtigungen, sondern auch ALTER-Berechtigungen für das Schema, z. B. DBO.

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO

Beispielsweise;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO
Andy Davies
quelle
1

In der Dokumentation der Berechtigungen für Schemas in 2008 R2 ist nichts über eine solche Berechtigung enthalten: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Daher würde ich folgern: Nein, das können Sie nicht. Die Erstellung einer Tabelle kann nur auf Datenbankebene gesteuert werden (dies scheint für alle Sicherheitselemente zu gelten).

Richard
quelle
Danke, ich stimme zu, es gibt nichts an diesem Level. Wie @ db2 jedoch festgestellt hat, reicht die Berechtigung "CREATE TABLE" auf Datenbankebene nicht aus, um einem Benutzer das Erstellen einer Tabelle zu ermöglichen, wenn er keine anderen Berechtigungen für das Schema hat.
RyanW
0

Sicher kannst du. Wenn Sie Benutzer1 haben, definieren Sie das Standardschema auch als Benutzer1. Gewähren Sie diesem Benutzer die Berechtigung CREATE TABLE in database. Das ist es. user1 kann nur Tabellen innerhalb des user1-Schemas erstellen.

user78128
quelle