Refusez des autorisations sur une collection de schémas XML.

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Les autorisations de créer une collection de schémas XML ou d'en utiliser qui existe déjà peuvent être refusées.

Refuser l'autorisation de créer une collection de schémas XML

Vous pouvez refuser l'autorisation de créer une collection de schémas XML en suivant l'une des méthodes suivantes :

  • Refuser l’autorisation ALTER sur le schéma relationnel.

  • Refuser l’autorisation CONTROL sur le schéma relationnel afin de refuser toutes les autorisations sur le schéma relationnel et sur tous les objets qu’il contient.

  • Refuser ALTER ANY SCHEMA sur la base de données. Dans ce cas, le principal ne peut créer de collection de schémas XML nulle part dans la base de données. Il est important de savoir que refuser les autorisations ALTER ou CONTROL sur la base de données revient à refuser toutes les autorisations sur tous les objets de la base de données.

Refuser les autorisations sur un objet de collection de schémas XML

Nous vous présentons maintenant les autorisations qui peuvent être refusées sur une collection de schémas XML existante, ainsi que les conséquences d'un tel refus :

  • Le refus de l'autorisation ALTER empêche le principal de modifier le contenu de la collection de schémas XML.

  • Le refus de l'autorisation CONTROL empêche le principal d'effectuer une quelconque opération sur la collection de schémas XML.

  • Le refus de l'autorisation REFERENCES empêche le principal de typer les colonnes et les paramètres ou d'en contraindre le type xml à l'aide de la collection de schémas XML. Cela empêche également le principal de faire référence à cette collection de schémas XML à partir d’autres collections de schémas XML.

  • Refuser l’autorisation VIEW DEFINITION refuse au principal la possibilité d’afficher le contenu d’une collection de schémas XML.

  • Le refus de l'autorisation EXECUTE empêche le principal d'insérer ou de mettre à jour les valeurs des colonnes, des variables et des paramètres typés ou contraints par la collection de schémas XML. Cela refuse également à l’utilisateur principal la possibilité d’interroger les valeurs dans ces mêmes colonnes et variables de type XML.

Exemples

Les scénarios proposés dans les exemples suivants montrent 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 comptes de connexion se voient accorder les autorisations nécessaires pour la collection de schémas XML. Chaque exemple effectue le nettoyage nécessaire à la fin.

A. Scénario pour empêcher un utilisateur de créer une collection de schémas XML

Une des méthodes pour empêcher un utilisateur de créer une collection de schémas XML consiste à lui refuser l'autorisation ALTER sur un schéma relationnel. Cela est illustré par l'exemple suivant.

Cet exemple crée un utilisateur TestLogin1et une base de données. Il crée également un schéma relationnel, en plus du schéma dbo , dans la base de données. L'autorisation CREATE XML SCHEMA de départ permet à l'utilisateur de créer une collection de schémas n'importe où dans la base de données. L'exemple refuse ensuite l'autorisation ALTER à l'utilisateur sur l'un des schémas relationnels. L'utilisateur ne peut donc plus créer de collection de schémas XML dans ce schéma relationnel.

Connectez-vous directement à la base de données master du serveur pour exécuter les commandes suivantes et créer un compte de connexion et une base de données d’exemple.

CREATE LOGIN TestLogin1 WITH password='<strong password>';
GO
CREATE DATABASE SampleDBForSchemaPermissions;
GO

Connectez-vous directement à la base de données d’exemple prévue et exécutez l’exemple de code suivant.

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

Connectez-vous directement à la master base de données du serveur pour exécuter les commandes suivantes afin de nettoyer les objets d’exemple.

DROP DATABASE SampleDBForSchemaPermissions;
GO
DROP LOGIN TestLogin1;
GO

B. Refus d'autorisations sur une collection de schémas XML

L'exemple suivant montre comment une autorisation spécifique sur une collection de schémas XML existante peut être refusée à une connexion. Dans cet exemple, une connexion de test se voit refuser l'autorisation REFERENCES sur une collection de schémas XML existante.

Cet exemple crée un utilisateur TestLogin1et une base de données. Il crée également un schéma relationnel, en plus du schéma dbo , dans la base de données. L'autorisation CREATE XML SCHEMA de départ permet à l'utilisateur de créer une collection de schémas n'importe où dans la base de données.

L'autorisation REFERENCES sur la collection de schémas XML permet à TestLogin1 d'utiliser le schéma lors de la création d'une colonne xml typée dans une table. Si l'autorisation REFERENCES sur la collection de schémas XML est refusée, elle empêche TestLogin1 de faire appel à la collection de schémas XML.

Connectez-vous directement à la base de données du master serveur pour exécuter les commandes suivantes afin de créer une connexion d’exemple et une base de données d’exemples.

CREATE LOGIN TestLogin1 WITH password='<strong password>';
GO
CREATE DATABASE SampleDBForSchemaPermissions;
GO

Connectez-vous directement à la base de données d’exemple prévue et exécutez l’exemple de code suivant.

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

Connectez-vous directement à la master base de données du serveur pour exécuter les commandes suivantes afin de nettoyer les objets d’exemple.

DROP DATABASE SampleDBForSchemaPermissions;
GO
DROP LOGIN TestLogin1;
GO