Révoquer des autorisations sur une collection de schémas XML

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Il est possible de retirer l'autorisation de créer une collection de schémas XML de l'une des façons suivantes :

  • Retrait de l'autorisation ALTER pour le schéma relationnel. Ensuite, le principal ne peut pas créer de collection de schémas XML dans le schéma relationnel. Toutefois, le principal reste en mesure de le faire dans d'autres schémas relationnels de la même base de données.

  • Retrait de l'autorisation ALTER ANY SCHEMA sur la base de données pour le principal. Ensuite, le principal ne peut pas créer une collection de schémas XML n’importe où dans la base de données.

  • Retrait des autorisations CREATE XML SCHEMA COLLECTION ou ALTER XML SCHEMA COLLECTION sur la base de données pour le principal. Le principal est ainsi empêché d'importer une collection de schémas XML dans la base de données. Le retrait des autorisations ALTER ou CONTROL sur la base de données a le même effet.

Révoquer des autorisations sur un objet de collection de schémas XML existant

Voici les autorisations qu'il est possible de retirer sur une collection de schémas XML, ainsi que les résultats qui en découlent :

  • En cas de retrait de l'autorisation ALTER, un principal n'a plus le droit de modifier le contenu de la collection de schémas XML.

  • En cas de retrait de l'autorisation TAKE OWNERSHIP, un principal n'a plus le droit de transférer l'appartenance de la collection de schémas XML.

  • En cas de retrait de l'autorisation REFERENCES, un principal n'a plus le droit d'utiliser une collection de schémas XML pour modifier le type ou la contrainte des colonnes de type xml, dans les tables et les vues, ou des paramètres. De plus, elle n'a plus l'autorisation de faire référence à cette collection de schémas à partir d'autres collections de schémas XML.

  • En cas de retrait de l'autorisation VIEW DEFINITION, un principal n'a plus le droit de consulter le contenu d'une collection de schémas XML.

  • En cas de retrait de l'autorisation EXECUTE, un principal n'a plus le droit d'insérer ni de mettre à jour des valeurs dans des colonnes, des variables et des paramètres typés ou contraints par la collection XML. De plus, elle n'a plus la possibilité de lancer une requête sur ces colonnes, variables ou paramètres de type xml .

Examples

Les scénarios proposés dans les exemples suivants illustrent le fonctionnement des autorisations sur les schémas XML. Chaque exemple crée la base de données de test, les schémas relationnels et les connexions nécessaires. Ces connexions reçoivent les autorisations nécessaires sur la collection de schémas XML. Chaque exemple procède au nettoyage qui s'impose à la fin de la procédure.

A. Révoquer des autorisations pour créer une collection de schémas XML

Cet exemple crée une connexion et un exemple de base de données. Il ajoute également un schéma relationnel à la base de données. Au départ, la connexion bénéficie d'une autorisation ALTER sur les deux schémas relationnels et des autorisations voulues pour créer des collections de schémas XML. Ensuite, l'exemple retire l'autorisation ALTER sur l'un des schémas relationnels de la base de données de façon à empêcher la connexion de créer une collection de schémas 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

Voir aussi