Condividi tramite


Revoca delle autorizzazioni per una raccolta di schemi XML

Per revocare l'autorizzazione per creare un insieme di schemi XML, è possibile eseguire una delle operazioni seguenti:

  • Revocare l'autorizzazione ALTER per lo schema relazionale. L'entità non sarà quindi in grado di creare un insieme di schemi XML nello schema relazionale, ma potrà comunque eseguire questa operazione negli altri schemi relazionali dello stesso database.

  • Revocare l'autorizzazione ALTER ANY SCHEMA dell'entità per il database. L'entità non sarà quindi in grado di creare un insieme di schemi XML all'interno del database.

  • Revocare l'autorizzazione CREATE XML SCHEMA COLLECTION o ALTER XML SCHEMA COLLECTION dell'entità per il database. Ciò impedisce all'entità di importare un insieme di schemi XML nel database. La revoca dell'autorizzazione ALTER o CONTROL per il database produce gli stessi effetti.

Revoca delle autorizzazioni per un oggetto insieme di schemi XML esistente

Di seguito sono riportate le autorizzazioni che è possibile revocare per un insieme di schemi XML e i relativi risultati:

  • La revoca dell'autorizzazione ALTER impedisce all'entità di modificare il contenuto dell'insieme di schemi XML.

  • La revoca dell'autorizzazione TAKE OWNERSHIP impedisce all'entità di trasferire la proprietà dell'insieme di schemi XML.

  • La revoca dell'autorizzazione REFERENCES impedisce all'entità di utilizzare l'insieme di schemi XML per tipizzare o vincolare le colonne di tipo xml di tabelle e viste nonché i parametri. Comporta inoltre la revoca dell'autorizzazione che consente di fare riferimento all'insieme di schemi da altri insiemi di schemi XML.

  • La revoca dell'autorizzazione VIEW DEFINITION impedisce all'entità di visualizzare il contenuto dell'insieme di schemi XML.

  • La revoca dell'autorizzazione EXECUTE impedisce all'entità di inserire o aggiornare valori nelle colonne, variabili e parametri tipizzati o vincolati dall'insieme XML. Comporta inoltre la revoca della possibilità di eseguire query su tali colonne, variabili o parametri di tipo xml.

Esempi

Gli scenari illustrati negli esempi seguenti descrivono il funzionamento delle autorizzazioni per gli schemi XML. In ogni esempio vengono creati il database, gli schemi relazionali e gli account di accesso di prova necessari. A tali account vengono concesse le autorizzazioni necessarie per l'insieme di schemi XML. Alla fine di ogni esempio vengono eseguite le operazioni di pulizia necessarie.

A. Revoca delle autorizzazioni per creare un insieme di schemi XML

In questo esempio vengono creati un account di accesso e un database di esempio e nel database viene inoltre aggiunto uno schema relazionale. Innanzitutto, all'account di accesso vengono concesse l'autorizzazione ALTER per entrambi gli schemi relazionali e le altre autorizzazioni necessarie per creare insiemi di schemi XML. Viene quindi revocata l'autorizzazione ALTER per uno degli schemi relazionali del database, in modo tale da impedire all'account di accesso di creare un insieme di schemi 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="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
-- 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="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
-- 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="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

-- 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="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