Compartir a través de


Denegar permisos en una colección de esquemas XML

Se puede denegar el permiso para crear una nueva colección de esquemas XML o usar una existente.

Denegar permiso para crear una colección de esquemas XML

Puede denegar el permiso para crear una colección de esquemas XML de las maneras siguientes:

  • Denegar el permiso ALTER en el esquema relacional.

  • Denegar CONTROL en el esquema relacional para denegar todos los permisos en el esquema relacional y en todos los objetos contenidos.

  • Denegar ALTER ANY SCHEMA en la base de datos. En este caso, el principal no puede crear una colección de esquemas XML en ningún lugar de la base de datos. Tenga en cuenta también que denegar el permiso ALTER o CONTROL en la base de datos deniega todos los permisos de todos los objetos de la base de datos.

Denegar permisos en un objeto de colección de esquemas XML

A continuación se muestra el permiso que se puede denegar en una colección de esquemas XML existente y los resultados:

  • Denegar el permiso ALTER deniega al principal la capacidad para modificar el contenido de la colección de esquemas XML.

  • Denegar el permiso CONTROL impide a la entidad principal la capacidad de realizar cualquier operación en la colección de esquemas XML.

  • Negar el permiso REFERENCES deniega al principal la capacidad de definir o restringir el uso de columnas y parámetros de tipo xml mediante la colección de esquemas XML. También deniega al principal la capacidad de hacer referencia a esta colección de esquemas XML desde otras colecciones de esquemas XML.

  • Denegar el permiso VIEW DEFINITION impide al usuario ver el contenido de una colección de esquemas XML.

  • Denegar el permiso EXECUTE deniega a la entidad de seguridad la capacidad de insertar o actualizar los valores en columnas, variables y parámetros que están definidos por tipo o restringidos por la colección de esquemas XML. También niega al principal la capacidad de consultar los valores en esas mismas columnas y variables de tipo XML.

Ejemplos

Los escenarios de los ejemplos siguientes muestran cómo funcionan los permisos de esquema XML. Cada ejemplo crea la base de datos de prueba necesaria, los esquemas relacionales y los inicios de sesión. A estos inicios de sesión se les conceden los permisos de recopilación de esquemas XML necesarios. Cada ejemplo realiza la limpieza necesaria al final.

Un. Impedir que un usuario cree una colección de esquemas XML

Una de las formas de evitar que un usuario cree una colección de esquemas XML es denegar el permiso ALTER en un esquema relacional. Esto se muestra en el ejemplo siguiente.

En el ejemplo se crea un usuario, TestLogin1y una base de datos. También crea un esquema relacional, además del dbo esquema, en la base de datos. Inicialmente, el CREATE XML SCHEMA permiso permite al usuario crear una colección de esquemas en cualquier lugar de la base de datos. A continuación, el ejemplo deniega ALTER el permiso al usuario en uno de los esquemas relacionales. Esto impide que el usuario cree una colección de esquemas XML en ese esquema relacional.

CREATE LOGIN TestLogin1 WITH password='SQLSvrPwd1'  
GO  
CREATE DATABASE SampleDBForSchemaPermissions  
GO  
USE SampleDBForSchemaPermissions  
GO  
-- Create another relational schema in the database.  
CREATE SCHEMA myOtherDBSchema  
GO  
CREATE USER TestLogin1  
GO  
-- For TestLogin1 to create/import XML schema collection, following  
-- permission needed.  
-- Database-level permissions  
GRANT CREATE XML SCHEMA COLLECTION TO TestLogin1  
GO  
GRANT ALTER ANY SCHEMA TO TestLogin1  
GO  
-- Now TestLogin1 can import an XML schema collection.  
SETUSER 'TestLogin1'  
GO  
CREATE XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>  
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo"   
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
elementFormDefault="qualified">  
<xsd:element name="telephone" type="xsd:string" />  
</xsd:schema>'  
GO  
DROP XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection  
GO  
-- Now deny permission from TestLogin1 to alter myOtherDBSchema.  
setuser  
GO  
DENY ALTER ON SCHEMA::myOtherDBSchema TO TestLogin1  
GO  
-- Now TestLogin1 cannot create xml schema collection.  
SETUSER 'TestLogin1'  
GO  
CREATE XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>  
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo"   
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
elementFormDefault="qualified">  
<xsd:element name="telephone" type="xsd:string" />  
</xsd:schema>'  
GO  
-- Final cleanup  
SETUSER  
GO  
USE master  
GO  
DROP DATABASE SampleDBForSchemaPermissions  
GO  
DROP LOGIN TestLogin1  
GO  

B. Denegar permisos en una colección de esquemas XML

En el ejemplo siguiente se muestra cómo se puede denegar un permiso específico en una colección de esquemas XML existente a un inicio de sesión. En este ejemplo, se le deniega al inicio de sesión de prueba el permiso REFERENCES en una colección de esquemas XML existente.

En el ejemplo se crea un usuario, TestLogin1y una base de datos. También crea un esquema relacional, además del dbo esquema, en la base de datos. Inicialmente, el CREATE XML SCHEMA permiso permite al usuario crear una colección de esquemas en cualquier lugar de la base de datos.

El REFERENCES permiso de la colección de esquemas XML permite a TestLogin1 usar el esquema en la creación de una columna de tipo xml en una tabla. Si se deniega el REFERENCES permiso en la colección de esquemas XML, impide que TestLogin1 use la colección de esquemas XML.

CREATE LOGIN TestLogin1 WITH password='SQLSvrPwd1'  
GO  
CREATE DATABASE SampleDBForSchemaPermissions  
GO  
USE SampleDBForSchemaPermissions  
GO  
-- Create another relational schema in the database.  
CREATE SCHEMA myOtherDBSchema  
GO  
CREATE USER TestLogin1  
GO  
-- For TestLogin1 to create/import XML schema collection, the following  
-- permission is required.  
-- Database-level permissions  
GRANT CREATE XML SCHEMA COLLECTION TO TestLogin1  
GO  
GRANT ALTER ANY SCHEMA TO TestLogin1  
GO  
-- Now TestLogin1 can import an XML schema collection.  
SETUSER 'TestLogin1'  
GO  
CREATE XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>  
<xsd:schema targetNamespace="http://schemas.adventure-works.com/Additional/ContactInfo"   
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
elementFormDefault="qualified">  
<xsd:element name="telephone" type="xsd:string" />  
</xsd:schema>'  
GO  
-- Grant permission to TestLogin1 to create a table and reference the XML schema collection.  
SETUSER  
GO  
GRANT CREATE TABLE TO TestLogin1  
GO  
-- The user also needs REFERENCES permission to use the XML schema collection  
-- to create a typed XML column (REFERENCES permission on the schema   
-- collection is not needed).  
GRANT REFERENCES ON XML SCHEMA COLLECTION::myOtherDBSchema.myTestSchemaCollection   
TO TestLogin1  
GO  
  
--TestLogin1 can use the schema.  
CREATE TABLE T(i int, x xml (myOtherDBSchema.myTestSchemaCollection))  
GO  
-- Drop the table.  
DROP TABLE T  
GO  
-- Now deny REFERENCES permission to TestLogin1 on the schema created previously.  
SETUSER  
GO  
DENY REFERENCES ON XML SCHEMA COLLECTION::myOtherDBSchema.myTestSchemaCollection TO TestLogin1  
  
GO  
-- Now TestLogin1 cannot create xml schema collection  
SETUSER 'TestLogin1'  
GO  
-- Following statement fails. TestLogin1 does not have REFERENCES   
-- permission on the XML schema collection.  
CREATE TABLE T(i int, x xml (myOtherDBSchema.myTestSchemaCollection))  
GO  
  
-- Final cleanup  
SETUSER  
GO  
USE master  
GO  
DROP DATABASE SampleDBForSchemaPermissions  
GO  
DROP LOGIN TestLogin1  
GO  

Véase también

Comparar XML con tipo y XML sin tipo
Colecciones de esquemas XML (SQL Server)
Requisitos y limitaciones de las colecciones de esquemas XML en el servidor
DENY (permisos de objeto de Transact-SQL)
GRANT (permisos de objeto de Transact-SQL)
Datos XML (SQL Server)