Partilhar via


Revogar permissões numa coleção de esquemas XML

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

A permissão para criar uma coleção de esquemas XML pode ser revogada usando uma das seguintes opções:

  • Revogue a permissão ALTER para o esquema relacional. Depois, o principal não pode criar uma coleção de esquemas XML no esquema relacional. No entanto, o utilizador principal ainda pode fazê-lo noutros esquemas relacionais na mesma base de dados.

  • Revogue a permissão ALTER QUALQUER SCHEMA no banco de dados para o principal. Depois, o principal não pode criar uma coleção de esquemas XML em nenhuma parte da base de dados.

  • Revogue a permissão CREATE XML SCHEMA COLLECTION ou ALTER XML SCHEMA COLLECTION na base de dados para o principal. Isto impede que o principal importe uma coleção de esquemas XML dentro da base de dados. Revogar a permissão ALTER ou CONTROL na base de dados tem o mesmo efeito.

Revogar permissões sobre um objeto de coleção de esquema XML existente

Seguem-se as permissões que podem ser revogadas numa coleção de esquemas XML e os resultados:

  • Revogar a permissão ALTER revoga a capacidade do principal de modificar o conteúdo da coleção do esquema XML.

  • Revogar a permissão TAKE OWNERSHIP revoga a capacidade do principal de transferir a propriedade da coleção de esquemas XML.

  • Revogar a permissão REFERENCES revoga a capacidade do principal de usar a coleção de esquemas XML para digitar ou restringir colunas do tipo xml, em tabelas, visões e parâmetros. Também revoga a permissão para consultar esta coleção de esquemas de outras coleções de esquemas XML.

  • Revogar a permissão VIEW DEFINITION revoga a capacidade do principal de visualizar o conteúdo de uma coleção de esquema XML.

  • Revogar a permissão EXECUTE revoga a capacidade do principal de inserir ou atualizar valores em colunas, variáveis e parâmetros que são tipados ou restritos pela coleção XML. Também revoga a capacidade de consultar tais colunas, variáveis ou parâmetros do tipo xml .

Examples

Os cenários nos exemplos seguintes ilustram como funcionam as permissões do esquema XML. Cada exemplo cria a base de dados de teste necessária, esquemas relacionais e logins. Estes logins recebem as permissões necessárias para recolha de esquemas XML. Cada exemplo realiza a limpeza necessária no final.

A. Revogar permissões para criar uma coleção de esquemas XML

Este exemplo cria um login e uma base de dados de exemplo. Também adiciona um esquema relacional na base de dados. Inicialmente, o login recebe permissão ALTER tanto em esquemas relacionais como noutras permissões necessárias para criar coleções de esquemas XML. O exemplo revoga então a permissão ALTER num dos esquemas relacionais na base de dados. Isto impede que o login crie uma coleção de esquemas XML.

SETUSER;
GO
CREATE LOGIN TestLogin1 with password='SQLSvrPwd1';
GO
CREATE DATABASE SampleDBForSchemaPermissions;
GO
use SampleDBForSchemaPermissions;
GO
-- Create another relational schema in the db (in addition to dbo schema)
CREATE SCHEMA myOtherDBSchema;
GO
CREATE USER TestLogin1;
GO
-- For TestLogin1 to create/import XML schema collection, following
-- permission needed
-- CREATE XML SCHEMA is a database level permission
GRANT CREATE XML SCHEMA COLLECTION TO TestLogin1;
GO
GRANT ALTER ON SCHEMA::myOtherDBSchema TO TestLogin1;
GO
GRANT ALTER ON SCHEMA::dbo TO TestLogin1;
GO
-- Now TestLogin1 can import an XML schema collection in both relational schemas.
SETUSER 'TestLogin1';
GO
CREATE XML SCHEMA COLLECTION dbo.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="https://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
-- TestLogin1 can create XML schema collection in myOtherDBSchema relational schema
CREATE XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="https://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
-- Let us drop XML schema collections from both relational schemas
DROP XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection;
GO
DROP XML SCHEMA COLLECTION dbo.myTestSchemaCollection;
GO
-- now REVOKE permission from TestLogin1 to alter myOtherDBSchema
SETUSER;
GO
REVOKE ALTER ON SCHEMA::myOtherDBSchema FROM TestLogin1;
GO
-- now TestLogin1 cannot create xml schema collection in myOtherDBSchema
SETUSER 'TestLogin1';
GO
CREATE XML SCHEMA COLLECTION myOtherDBSchema.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="https://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

-- TestLogin1 can still create XML schema collections in dbo
-- It cannot create XML schema collections anywhere in the database
-- if we REVOKE CREATE XML SCHEMA COLLECTION permission
SETUSER;
GO
REVOKE CREATE XML SCHEMA COLLECTION FROM TestLogin1;
GO

SETUSER 'TestLogin1';
GO
-- the following now should fail
CREATE XML SCHEMA COLLECTION dbo.myTestSchemaCollection AS '<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="https://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

Consulte também