web-dev-qa-db-fra.com

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

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

ACCORDEZ

GRANT autorisations de base de données

14
RyanW

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.

12
db2

Accorder 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
6
Andy Davies

Il n'y a rien à propos d'une telle autorisation dans la documentation des autorisations applicables aux schémas dans 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).

1
Richard

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

0
user78128