Sentencia CREATE SCHEMA en Transasct SQL
CREATE SCHEMA es la sentencia Transact SQL para crear un esquema de base de datos en SQL Server. A nivel de base de datos, un esquema es una estructura que permite agrupar y organizar los diferentes objetos de menor jerarquía como tablas, vistas, procedimientos almacenados, funciones … en un conjunto lógico específico, de manera que los objetos queden agrupados en espacios de nombres independientes.
Es importante atender al siguiente orden de jerarquía de todos los componentes participantes de una base de datos: Server-Database-esquema-DatabaseObject.
CREATE SCHEMA
Cuando creamos una base de datos en SQL Server, está ya contiene una serie de esquemas predefinidos que corresponden al nombre de los usuarios integrados del sistema. Por defecto, cuando creamos un objeto de base de datos y no especificamos el esquema, este se creará automáticamente en el esquema dbo.
Podemos, no obstante, si disponemos de autorización y permisos por parte del administrador de base de datos, crear nuevos esquemas y mover los objetos existentes al mismo a través de la sentencia SQL ALTER
.
Para visualizar los esquemas predefinidos del sistema podremos hacerlo desplegando la siguiente ruta de directorios de nuestra base de datos: Databases-database-Security-Schemas
tal como podemos visualizar en la siguiente imagen.
Estos esquemas del sistema no pueden ser eliminados.
Los esquemas de base de datos son también un recurso muy útil en la administración de permisos y seguridad de una base de datos. Como administradores de base de datos, podremos asociar un esquema a un usuario determinado y gestionar los permisos específicos que aplican a los objetos de ese esquema para ese usuario.
A continuación, veremos la manera de crear un nuevo esquema por sentencia directa Transact SQL, no olvidando que también puede utilizarse en caso deseado el editor gráfico del SQL Server Managment Studio (SSMS).
Una vez en nuestra ventana de edición de SQL Server Managment Studio (SSMS), podemos crear un nuevo esquema con la sentencia CREATE SCHEMA nombreEsquema
; Podemos añadir la cláusula AUTHORIZATION a la sentencia para definir un usuario como propietario del esquema en particular. De esa manera la sentencia quedaría bajo esta fórmula sintáctica:
CREATE SCHEMA nombreEsquema AUTHORIZATION nombreUsuario;
El nombre de usuario que acompaña la cláusula AUTHORIZATION tiene que existir previamente en la base de datos. Si no utilizamos la cláusula AUTHORIZATION, el esquema se asignará por defecto al usuario actual que estemos utilizando.
Otorgar permisos al esquema
De manera opcional como administrador, podemos gestionar los permisos de usuario y roles respecto al esquema. De esta manera, podemos limitar la acción de los diferentes usuarios y roles respecto a los objetos que contenga el esquema en particular.
Estas configuraciones las podremos realizar antes de terminar de crear el esquema desde el editor o una vez ya generado. En ese caso, simplemente bastará actualizar con F5 los esquemas, situarnos en el recién creado y con el clic derecho de ratón seleccionar la opción properties.
Dichos permisos también se podrán administrar con sentencias SQL (GRANT
, REVOKE
) que lo veremos en las secciones referentes a DCL (Data Control Language).
Pasamos ahora a explicar e ilustrar como gestionar los permisos referentes al esquema desde el editor gráfico de SQL Server Managment Studio (SSMS).
- Una vez abierta la ventana emergente, nos situamos sobre la opción permissions.
- Pinchamos sobre la opción search y se nos abrirá una nueva ventana emergente para seleccionar los usuarios o roles a los que aplicar los permisos.
- Desde la opción object types podemos filtrar por un tipo de objeto en particular (usuarios, roles de base de datos o roles de aplicación.)
- Desde browse, seleccionamos los usuarios y/o roles específicos del filtrado anterior sobre los que se aplicarán los permisos.
- Una vez seleccionados los usuarios y roles deseados, podemos administrar los permisos de manera sencilla seleccionando aquellos que queremos otorgar y los que queramos denegar.
En este ejemplo, estamos concediendo permisos de consulta al usuario guest sobre los objetos pertenecientes al esquema esquemapruebaeditor
y a su vez le estamos impidiendo realizar operaciones que alteren de algún modo el contenido de la base de datos, ya sea inserts, deletes o updates.