CREATE SCHEMA (Transact-SQL)
Crea un esquema en la base de datos actual. La transacción CREATE SCHEMA también puede crear tablas y vistas dentro del nuevo esquema, así como establecer la concesión, denegación o revocación (GRANT, DENY o REVOKE) de permisos en esos objetos.
Sintaxis
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]
<schema_name_clause> ::=
{
schema_name
| AUTHORIZATION owner_name
| schema_name AUTHORIZATION owner_name
}
<schema_element> ::=
{
table_definition | view_definition | grant_statement |
revoke_statement | deny_statement
}
Argumentos
schema_name
Es el nombre por el que se identifica al esquema en esta base de datos.AUTHORIZATION owner_name
Especifica el nombre de la entidad de seguridad de la base de datos que poseerá el esquema. Es posible que esta entidad de seguridad posea otros esquemas y no utilice el esquema actual como predeterminado.table_definition
Especifica una instrucción CREATE TABLE que crea una tabla en el esquema. La entidad de seguridad que ejecuta esta instrucción debe tener el permiso CREATE TABLE en la base de datos actual.view_definition
Especifica una instrucción CREATE VIEW que crea una vista en el esquema. La entidad de seguridad que ejecuta esta instrucción debe tener el permiso CREATE VIEW en la base de datos actual.grant_statement
Especifica una instrucción GRANT que otorga permisos sobre cualquier elemento protegible, excepto el esquema nuevo.revoke_statement
Especifica una instrucción REVOKE que revoca permisos sobre cualquier elemento protegible, excepto el esquema nuevo.deny_statement
Especifica una instrucción DENY que deniega permisos sobre cualquier elemento protegible, excepto el esquema nuevo.
Comentarios
Nota
Las instrucciones que contienen CREATE SCHEMA AUTHORIZATION pero no especifican ningún nombre solo se admiten por razones de compatibilidad con versiones anteriores.
CREATE SCHEMA puede crear un esquema, las tablas y las vistas que lo contienen; asimismo, puede tener permisos GRANT, REVOKE o DENY para cualquier elemento protegible; todo ello en una sola instrucción. Esta instrucción debe ejecutarse como un lote independiente. Los objetos creados por la instrucción CREATE SCHEMA se crean dentro del esquema que se está creando.
Las transacciones CREATE SCHEMA son atómicas. Si ocurre un error durante la ejecución de una instrucción CREATE SCHEMA, no se crea ninguno de los elementos protegibles especificados ni se conceden permisos.
Los elementos protegibles, que va a crear CREATE SCHEMA, se pueden enumerar en cualquier orden, excepto en el caso de las vistas que hacen referencia a otras vistas. En estos casos, la vista a la que se hace referencia debe crearse antes que la vista que hace la referencia.
Por lo tanto, una instrucción GRANT puede conceder permiso para un objeto antes de que ese objeto se haya creado o una instrucción CREATE VIEW puede aparecer antes que las instrucciones CREATE TABLE que crean las tablas a las que hace referencia la vista. Además, las instrucciones CREATE TABLE pueden declarar claves externas a las tablas definidas posteriormente en la instrucción CREATE SCHEMA.
Nota
DENY y REVOKE se admiten dentro de instrucciones CREATE SCHEMA. Las cláusulas DENY y REVOKE se ejecutarán en el orden en que aparecen en la instrucción CREATE SCHEMA.
La entidad de seguridad que ejecuta CREATE SCHEMA puede especificar otra entidad de seguridad de base de datos como el propietario del esquema que se crea. Esto requiere permisos adicionales, como se describe en la sección "Permisos", más adelante en este tema.
El esquema nuevo es propiedad de una de las siguientes entidades de seguridad de nivel de base de datos: usuario de base de datos, rol de base de datos o rol de aplicación. Los objetos creados dentro de un esquema son propiedad del esquema y tienen un principal_id NULL en sys.objects. La propiedad de los objetos incluidos en el esquema puede transferirse a cualquier entidad de seguridad de nivel de base de datos, pero el propietario del esquema siempre mantiene el permiso CONTROL en los objetos del esquema.
Advertencia |
---|
El comportamiento de los esquemas cambió en SQL Server 2005. En consecuencia, el código que supone que los esquemas son equivalentes a los usuarios de base de datos puede dejar de devolver resultados correctos. Las antiguas vistas de catálogo, incluida sysobjects, no se deben usar en una base de datos en la que se haya utilizado alguna vez cualquiera de las siguientes instrucciones DDL: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. En esas bases de datos, debe usar las nuevas vistas de catálogo. En las nuevas vistas de catálogo se tiene en cuenta la separación de entidades de seguridad y esquemas que se estableció en SQL Server 2005. Para obtener más información sobre las vistas de catálogo, vea Vistas de catálogo (Transact-SQL). |
Cuando se crea un objeto de base de datos, si especifica una entidad de seguridad de dominio válida (usuario o grupo) como la propietaria del objeto, la entidad de seguridad de dominio se agregará a la base de datos como esquema. Esa entidad de seguridad de dominio será la propietaria del nuevo esquema.
Aviso sobre elementos obsoletos
Las instrucciones CREATE SCHEMA que no especifiquen ningún nombre de esquema se admiten actualmente por razones de compatibilidad con versiones anteriores. Estas instrucciones no crean realmente un esquema dentro de la base de datos, sino que crean tablas y vistas, y conceden permisos. Las entidades de seguridad no necesitan el permiso CREATE SCHEMA para ejecutar esta forma anterior de CREATE SCHEMA, ya que en realidad no se crea ningún esquema. Esta característica se quitará en una versión futura de SQL Server.
Permisos
Requiere el permiso CREATE SCHEMA en la base de datos.
Para crear un objeto especificado dentro de la instrucción CREATE SCHEMA, el usuario debe tener el permiso CREATE correspondiente.
Para especificar otro usuario como el propietario del esquema que se está creando, el autor de la llamada debe tener el permiso IMPERSONATE sobre ese usuario. Si se especifica un rol de base de datos como propietario, el autor de la llamada debe pertenecer al rol o debe tener el permiso ALTER para el rol.
Nota
En la sintaxis compatible con las versiones anteriores, no se comprueban los permisos CREATE SCHEMA porque no se está creando ningún esquema.
Ejemplos
En el ejemplo siguiente se crea el esquema Sprockets, que es propiedad de Annik y contiene la tabla NineProngs. La instrucción concede el permiso SELECT a Mandar y deniega el permiso SELECT a Prasanna. Tenga en cuenta que Sprockets y NineProngs se crean en una sola instrucción.
USE AdventureWorks2008R2;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
CREATE TABLE NineProngs (source int, cost int, partnumber int)
GRANT SELECT ON SCHEMA::Sprockets TO Mandar
DENY SELECT ON SCHEMA::Sprockets TO Prasanna;
GO
Vea también