Verweigern von Berechtigungen für eine XML-Schemasammlung

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Die Berechtigung zum Erstellen einer neuen XML-Schemaauflistung bzw. zum Verwenden einer vorhandenen Schemaauflistung kann verweigert werden.

Berechtigung zum Erstellen einer XML-Schemaauflistung verweigern

Es gibt folgende Möglichkeiten, um die Berechtigung zum Erstellen einer XML-Schemaauflistung zu verweigern:

  • Verweigern der ALTER-Berechtigung für das relationale Schema.

  • Verweigern der CONTROL-Berechtigung für das relationale Schema, um alle Berechtigungen für das relationale Schema und alle darin enthaltenen Objekte zu verweigern.

  • Verweigern der ALTER ANY SCHEMA-Berechtigung für die Datenbank. In diesem Fall kann der Prinzipal keine XML-Schemaauflistung an einer beliebigen Stelle in der Datenbank erstellen. Beachten Sie, dass das Verweigern der ALTER- oder CONTROL-Berechtigung für die Datenbank alle Berechtigungen für alle Objekte in der Datenbank verweigert.

Verweigern von Berechtigungen für ein XML-Schemasammlungsobjekt

Die folgenden Berechtigungen können mit den aufgeführten Ergebnissen für eine vorhandene XML-Schemaauflistung verweigert werden:

  • Durch das Verweigern der ALTER-Berechtigung wird einem Prinzipal die Fähigkeit zum Ändern des Inhalts der XML-Schemaauflistung abgesprochen.

  • Durch das Verweigern der CONTROL-Berechtigung wird einem Prinzipal die Fähigkeit zum Ausführen beliebiger Vorgänge mit der XML-Schemaauflistung abgesprochen.

  • Durch das Verweigern der REFERENCES-Berechtigung wird einem Prinzipal die Fähigkeit zum Typisieren oder Einschränken von Spalten und Parametern vom Typ xml mithilfe der XML-Schemaauflistung abgesprochen. Außerdem wird dem Prinzipal die Möglichkeit zum Verweisen auf diese XML-Schemaauflistung aus anderen XML-Schemaauflistungen verweigert.

  • Durch das Verweigern der VIEW DEFINITION-Berechtigung wird einem Prinzipal die Fähigkeit zum Anzeigen des Inhalts einer XML-Schemaauflistung abgesprochen.

  • Durch das Verweigern der EXECUTE-Berechtigung wird dem Prinzipal die Fähigkeit zum Einfügen oder Aktualisieren von Werten in Spalten, Variablen und Parametern abgesprochen, die durch die XML-Auflistung typisiert oder eingeschränkt werden. Außerdem wird dem Prinzipal die Möglichkeit zum Abfragen der Werte in diesen Spalten und Variablen vom Typ xml abgesprochen.

Beispiele

Die Szenarien in den folgenden Beispielen veranschaulichen, wie XML-Schemaberechtigungen funktionieren. Jedes dieser Beispiele erstellt die erforderliche Testdatenbank, die relationalen Schemas und Anmeldungen. Diesen Anmeldenamen werden die erforderlichen Berechtigungen für XML-Schemaauflistungen erteilt. Jedes der Beispiele führt am Ende den erforderlichen Cleanup aus.

A. Verhindern, dass ein Benutzer eine XML-Schemaauflistung erstellen kann

Wenn Sie verhindern möchten, dass ein Benutzer eine XML-Schemaauflistung erstellen kann, können Sie z. B. die ALTER-Berechtigung für ein relationales Schema verweigern. Dies wird im folgenden Beispiel gezeigt.

Dieses Beispiel erstellt einen Benutzer, TestLogin1, und eine Datenbank. Außerdem wird neben dem dbo -Schema ein relationales Schema in der Datenbank erstellt. Anfangs ermöglicht die CREATE XML SCHEMA -Berechtigung dem Benutzer das Erstellen einer Schemaauflistung in der gesamten Datenbank. Das Beispiel verweigert dann die ALTER -Berechtigung für den Benutzer für eines der relationalen Schemas. Dies verhindert, dass der Benutzer eine XML-Schemaauflistung in diesem relationalen Schema erstellen kann.

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="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
USE master;
GO
DROP DATABASE SampleDBForSchemaPermissions;
GO
DROP LOGIN TestLogin1;
GO

B. Verweigern von Berechtigungen für eine XML-Schemaauflistung

Das folgende Beispiel zeigt, wie einem Anmeldenamen eine bestimmte Berechtigung für eine vorhandene XML-Schemaauflistung verweigert werden kann. In diesem Beispiel wird einem Testanmeldenamen die REFERENCES-Berechtigung für eine vorhandene XML-Schemaauflistung verweigert.

Dieses Beispiel erstellt einen Benutzer, TestLogin1, und eine Datenbank. Außerdem wird neben dem dbo -Schema ein relationales Schema in der Datenbank erstellt. Anfangs ermöglicht die CREATE XML SCHEMA -Berechtigung dem Benutzer das Erstellen einer Schemaauflistung in der gesamten Datenbank.

Durch die REFERENCES -Berechtigung für die XML-Schemaauflistung kann TestLogin1 das Schema beim Erstellen einer typisierten xml -Spalte in einer Tabelle verwenden. Wenn die REFERENCES -Berechtigung für die XML-Schemaauflistung verweigert wird, kann TestLogin1 die XML-Schemaauflistung nicht verwenden.

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="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
USE master;
GO
DROP DATABASE SampleDBForSchemaPermissions;
GO
DROP LOGIN TestLogin1;
GO

Siehe auch