Con SQL Server (2008), ¿puede otorgar permiso para crear una tabla dentro de un esquema?


14

Al trabajar con seguridad en SQL Server 2008, estoy tratando de otorgarle a un usuario permisos CREATE TABLE, pero solo dentro de un esquema específico. ¿El permiso CREATE TABLE solo se aplica a nivel de base de datos?

¿Puedo limitar al usuario para crear una tabla solo dentro de un esquema?

He intentado:

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

y

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

Pero el usuario aún no puede crear una tabla dentro del esquema de destino. No es hasta que ejecuto esto, que el usuario puede crear una tabla:

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

CONCEDER

Permisos de base de datos GRANT

Respuestas:


12

Según la ayuda de SQL Server 2008:

Requiere el permiso CREATE TABLE en la base de datos y el permiso ALTER en el esquema en el que se está creando la tabla.

Acabo de probar esto usando EXECUTE AS en una base de datos de prueba, y pude crear una tabla en el esquema que tenía permiso ALTER, pero no en el esquema dbo (para el cual no concedí permiso ALTER). Entonces, siempre y cuando no se haya vuelto demasiado liberal con el permiso ALTER en los esquemas, esta debería ser la forma de hacerlo.


1
Sí, ya veo eso ahora. Aunque el usuario tiene el permiso "CREAR TABLA" en el nivel de la base de datos, no puede crear tablas en esquemas donde no se haya otorgado ningún otro permiso.
RyanW

Definitivamente parece desafortunado que tenga que otorgar un permiso general CREATE TABLE solo para habilitar este escenario.
MgSam

6

Otorgar permiso para crear tablas a un usuario específico en una base de datos específica no solo requiere permisos CREATE TABLE sino que también requiere permisos ALTER para el esquema, por ejemplo, DBO.

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

Por ejemplo;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO

1

No hay nada sobre dicho permiso en la documentación de permisos aplicables a esquemas en 2008 R2: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Por lo tanto, concluiría: no, no puede, crear tabla solo se puede controlar a nivel de base de datos (parece que esto se aplica a todos los asegurables).


Gracias, estoy de acuerdo, no hay nada sobre ese nivel. Sin embargo, como ha notado @ db2, el permiso "CREATE TABLE" a nivel de base de datos no es suficiente para permitir que un usuario cree una tabla si no tiene otros permisos en el esquema.
RyanW

0

Seguro que puede. Si tiene usuario1, defina su esquema predeterminado como usuario1 también. Otorgue permisos CREATE TABLE en la base de datos a este usuario. Eso es. user1 solo puede crear tablas dentro del esquema user1.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.