Avec SQL Server (2008), pouvez-vous accorder l'autorisation de création de table dans un schéma?

14

En travaillant avec la sécurité dans SQL Server 2008, j'essaie d'accorder à un utilisateur des autorisations CREATE TABLE, mais uniquement dans un schéma spécifique. L'autorisation CREATE TABLE s'applique-t-elle uniquement au niveau de la base de données?

Puis-je limiter l'utilisateur à créer une table uniquement dans un schéma?

J'ai essayé:

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

et

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

Mais, l'utilisateur n'est toujours pas en mesure de créer une table dans le schéma cible. Ce n'est que lorsque je lance ceci, que l'utilisateur peut créer une table:

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

SUBVENTION

Autorisations de base de données GRANT

RyanW
la source

Réponses:

12

Selon l'aide de SQL Server 2008:

Nécessite l'autorisation CREATE TABLE dans la base de données et l'autorisation ALTER sur le schéma dans lequel la table est créée.

Je viens de tester cela en utilisant EXECUTE AS dans une base de données de test, et j'ai pu créer une table dans le schéma qui avait l'autorisation ALTER, mais pas dans le schéma dbo (pour lequel je n'ai pas accordé l'autorisation ALTER). Donc, tant que vous n'êtes pas devenu trop libéral avec l'autorisation ALTER sur les schémas, cela devrait être la façon de le faire.

db2
la source
1
Oui, je vois ça maintenant. Même si l'utilisateur dispose de l'autorisation "CREATE TABLE" au niveau de la base de données, il ne nous permet pas de créer des tables dans des schémas où aucune autre autorisation n'a été accordée.
RyanW
Il semble définitivement malheureux que vous deviez accorder une autorisation globale CREATE TABLE uniquement pour activer ce scénario.
MgSam
6

L'octroi de l'autorisation de créer des tables à un utilisateur spécifique dans une base de données spécifique nécessite non seulement des autorisations CREATE TABLE, mais également des autorisations ALTER sur le schéma, par exemple DBO.

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

Par exemple;

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

Il n'y a rien sur une telle autorisation dans la documentation des autorisations applicables aux schémas en 2008 R2: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Par conséquent, je conclurais: non, vous ne pouvez pas, créer une table ne peut être contrôlé qu'au niveau de la base de données (cela semble s'appliquer à tous les éléments sécurisables).

Richard
la source
Merci, je suis d'accord, il n'y a rien à ce niveau. Comme @ db2 l'a noté cependant, l'autorisation "CREATE TABLE" au niveau de la base de données n'est pas suffisante pour permettre à un utilisateur de créer une table s'il n'a aucune autre autorisation sur le schéma.
RyanW
0

Sûr que vous pouvez. Si vous avez utilisateur1, définissez également son schéma par défaut en tant qu'utilisateur1. Accordez à cet utilisateur les autorisations CREATE TABLE in database. C'est ça. user1 peut uniquement créer des tables dans le schéma user1.

user78128
la source