Condividi tramite


Negazione di autorizzazioni per una raccolta di schemi XML

È possibile negare l'autorizzazione per la creazione di un nuovo insieme di schemi XML o per l'utilizzo di un insieme esistente.

Negazione dell'autorizzazione per la creazione di un insieme di schemi XML

È possibile negare l'autorizzazione per la creazione di un insieme di schemi XML nei modi seguenti:

  • Negando l'autorizzazione ALTER per lo schema relazionale.

  • Negando l'autorizzazione CONTROL per lo schema relazionale in modo da negare tutte le autorizzazioni per lo schema relazionale e per tutti gli oggetti contenuti.

  • Negando l'autorizzazione ALTER ANY SCHEMA per il database. In tal caso, l'entità non può creare un insieme di schemi XML in una posizione all'interno del database. Si noti inoltre che tramite la negazione dell'autorizzazione ALTER o CONTROL vengono negate tutte le autorizzazioni per tutti gli oggetti del database.

Negazione di autorizzazioni per un oggetto di un insieme di schemi XML

Per un insieme di schemi XML esistente e i relativi risultati è possibile negare le autorizzazioni seguenti:

  • Tramite la negazione dell'autorizzazione ALTER, all'entità viene negata la possibilità di modificare il contenuto di un insieme di schemi XML.

  • Tramite la negazione dell'autorizzazione CONTROL, all'entità viene negata la possibilità di eseguire qualsiasi operazione sull'insieme di schemi XML.

  • Tramite la negazione dell'autorizzazione REFERENCES, all'entità viene negata la possibilità di tipizzare o vincolare parametri e colonne di tipo XML mediante l'insieme di schemi XML, nonché la possibilità di fare riferimento a tale insieme da altri insiemi di schemi XML.

  • Tramite la negazione dell'autorizzazione VIEW DEFINITION, all'entità viene negata la possibilità di visualizzare il contenuto di un insieme di schemi XML.

  • Tramite la negazione dell'autorizzazione EXECUTE, all'entità viene negata la possibilità di inserire o aggiornare i valori in colonne, variabili e parametri tipizzati o vincolati dall'insieme di schemi XML, nonché la possibilità di eseguire query sui valori nelle stesse variabili e colonne di tipo XML.

Esempi

Gli scenari degli esempi seguenti illustrano il funzionamento delle autorizzazioni per lo schema XML. In ogni esempio vengono creati il database di prova, gli schemi relazionali e gli account di accesso necessari. A tali account di accesso vengono concesse le autorizzazioni necessarie per l'insieme di schemi XML. Alla fine di ogni esempio viene eseguito il processo di eliminazione necessario.

A. Procedura per impedire a un utente di creare un insieme di schemi XML

Uno dei modi per impedire a un utente di creare un insieme di schemi XML consiste nel negare l'autorizzazione ALTER per uno schema relazionale, come illustrato nell'esempio seguente.

Nell'esempio vengono creati l'account utente TestLogin1 e un database, nonché uno schema relazionale, in aggiunta allo schema dbo, nel database. Inizialmente, l'autorizzazione CREATE XML SCHEMA consente all'utente di creare un insieme di schemi in una posizione qualsiasi all'interno del database. Nell'esempio viene negata all'utente l'autorizzazione ALTER per uno degli schemi relazionali. In questo modo, viene impedito all'utente di creare un insieme di schemi XML in tale schema relazionale.

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. Negazione di autorizzazioni per un insieme di schemi XML

Nell'esempio seguente viene illustrato come negare a un account di accesso un'autorizzazione specifica per un insieme di schemi XML esistente. In questo esempio, a un account di accesso di prova viene negata l'autorizzazione REFERENCES per un insieme di schemi XML esistente.

Nell'esempio vengono creati l'account utente TestLogin1 e un database, nonché uno schema relazionale, in aggiunta allo schema dbo, nel database. Inizialmente, l'autorizzazione CREATE XML SCHEMA consente all'utente di creare un insieme di schemi in una posizione qualsiasi all'interno del database.

L'autorizzazione REFERENCES per l'insieme di schemi XML consente a TestLogin1 di utilizzare lo schema nella creazione di una colonna xml tipizzata in una tabella. Se viene negata l'autorizzazione REFERENCES per l'insieme di schemi XML, TestLogin1 non potrà utilizzare tale insieme.

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