Återkalla behörigheter för en XML-schemasamling

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Behörigheten att skapa en XML-schemasamling kan återkallas med något av följande:

  • Återkalla ALTER-behörigheten för relationsschemat. Huvudansvarig kan därefter inte skapa en XML-schemasamling i relationsschemat. Huvudanvändaren kan dock fortfarande utföra den åtgärden i de andra relationsscheman i samma databas.

  • Återkalla behörigheten ALTER ANY SCHEMA för huvudkontot i databasen. Huvudenheten kan sedan inte skapa en XML-schemasamling någonstans i databasen.

  • Återkalla behörigheten CREATE XML SCHEMA COLLECTION eller ALTER XML SCHEMA COLLECTION på databasen för huvudpersonen. Detta förhindrar att huvudkontot importerar en XML-schemasamling i databasen. Att återkalla ALTER- eller CONTROL-behörigheten för databasen har samma effekt.

Återkalla behörigheter för ett befintligt XML-schemasamlingsobjekt

Följande är de behörigheter som kan återkallas för en XML-schemasamling och resultaten:

  • Om du återkallar ALTER-behörigheten återkallas en huvudsprincipals möjlighet att ändra innehållet i XML-schemasamlingen.

  • Återkallande av behörigheten att ta ägarskap återkallar en huvudansvarigs möjlighet att överföra ägarskapet för XML-schemasamlingen.

  • Om du återkallar behörigheten REFERENSER återkallas användarens möjlighet att använda XML-schemasamlingen för typering eller begränsning av XML-typkolumner i tabeller, vyer och parametrar. Den återkallar också behörigheten att referera till den här schemasamlingen från andra XML-schemasamlingar.

  • Genom att återkalla behörigheten VIEW DEFINITION återkallas en användares möjlighet att visa innehållet i en XML-schemainsamling.

  • Att återkalla behörigheten EXECUTE återkallar en användares möjlighet att lägga in eller uppdatera värden i kolumner, variabler och parametrar som är skrivna eller begränsade av XML-samlingen. Det återkallar också möjligheten att fråga kolumner, variabler eller parametrar av typen xml.

Examples

Scenarierna i följande exempel illustrerar hur XML-schemabehörigheter fungerar. Varje exempel skapar den nödvändiga testdatabasen, relationsscheman och inloggningar. Dessa inloggningar beviljas nödvändiga XML-schemainsamlingsbehörigheter. Varje exempel gör den nödvändiga rensningen i slutet.

A. Återkalla behörigheter för att skapa en XML-schemasamling

I det här exemplet skapas en inloggning och en exempeldatabas. Det lägger också till ett relationsschema i databasen. Ursprungligen beviljas inloggningen ALTER-behörighet för både relationsscheman och andra nödvändiga behörigheter för att skapa XML-schemasamlingar. Exemplet återkallar sedan ALTER-behörigheten för ett av relationsschemana i databasen. Detta förhindrar att inloggningen skapar en XML-schemasamling.

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

Se även